Go并发编程-context开源例子

DB.conn 控制超时

首先直接检查一次 context.Context 有沒有超时。
这种提前检测一下的用法还是比较常见的。比如说 RPC 链路超时控制就可以先看看context 有没有超时。
如果超时则可以不发送请求,直接返回超时响应。
首先检查context超时

超时控制至少两个分支:超时分支正常业务分支
所以普遍来说 context.Context 会和select-case 一起使用。
超时分支正常业务分支
在这里插入图片描述

errgroup.WithContext利用context来传递信号

todo errgroup控制任务停止

  • WithContext 会返回一个 context.Context实例

  • 如果 errgroup.Group 的 Wait 返回,或者任何一个Group执行的函数返回error,context.Context 实例都会被取消(一损俱损)

  • 所以用户可以通过监听 context.Context 来判断 errgroup.Group 的执行情况

    这是典型的将 context.Context 作为信号载体的用法,本质是依赖于 channel 的特性。
    在这里插入图片描述

Kratos在这里插入图片描述

下边 Kratos 利用这个特性来优雅启动服务实例,并且监听服务实例启动情况的代码片段。

  • 如果黄色框返回,说明是启动有问题,那么其它启动没有问题的 Server 也会退出,确保要么全部成功,要么全部失败;
  • 如果是蓝色框返回,说明监听到了退出信号,比如说 ctrl+ C,Server 都会退出。
  • 注意:所有的 Server 调用 Stop 都是创建了一个新的 context,这是因为关闭的时候需要摆脱启动时候的 context 的控制。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值