4.3.2 心跳状态


4.3.2 心跳状态

每个消费者客户端都只有一个心跳任务,心跳对象(Heartbeat)除了记录心跳任务的元数据-一会话超时时间(timeout)、定时任务时间间隔(interval),还会记录当前心跳任务的状态一一最近的会话重置时间、最近的心跳发送时间、最近的心跳接收时间。相关代码如下:

在这里插入图片描述

timeToNextHeartbeat()方法会计算当前时间到下一次调度的时间间隔,它跟上一次心跳任务的发生时间有关,会用来判断什么时候可以发送下一次心跳:如果返回值为0,表示当前时间减去上一次调度时间的差距大于心跳间隔,需要立即发送下一次心跳;如果大于0,表示当前时间还没到达下一次调度时间,还需要多久才会发生下一次心跳。

如图4-33(上)所示,心跳间隔设置为5秒,上一次心跳的时间是0秒,下一次的心跳时间就是5秒。如果当前时间是2秒,它距离上次心跳时间才过去了2秒,还没到下次心跳的时间,方法返回值为3秒,表示再过3秒才会发生下一次心跳。如果当前时间是4秒,它距离上次心跳时间过去了4秒,也还没到下次心跳的时间,方法的返回值为1秒,表示再过1秒会发生下一次心跳。如图4-33(下)所示,本来应该在5秒发生的心跳因为某种原因没有执行(浅灰色圆圈)。轮询时的当前时间是6秒,距离上次心跳过去了6秒,超过心跳间隔,返回值为0秒,需要马上发生心跳。
在这里插入图片描述

实际上,在计算当前时间和距离上次心跳的时间(ti.meSi.nceLastHeartbeat)时,还会用到上一次会话的重置时间(lastSessi.onReset)。因为如果是客户端第一次启动,上次心跳是没有数据的,只能用上次的会话重置时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

water___Wang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值