本文为您介绍轻量消息队列(原 MNS)的推送退避策略。
背景信息
在订阅不可用的情况下,为保障整体服务可用性,轻量消息队列(原 MNS)会使用推送退避算法调整向下游订阅方推送消息的速度和数量。根据连续推送失败的次数,对推送间隔时间和单次推送最大条数进行调整:
推送间隔时间:从0逐步扩大至500毫秒,最终达到最大60秒。
单次推送最大条数:从32 条逐渐下降到 1 条。
当轻量消息队列(原 MNS)检测到订阅恢复可用后,会使用快速恢复算法将推送速度和数量在100秒内恢复到初始状态。
在推送退避情况下,重试消息重试间隔会变大,将不再满足重试策略(NotifyStrategy)中的重试间隔和重试次数,通常情况下,推送退避发生后消息的重试次数会变少。建议在该场景中为订阅配置死信队列。
订阅不可用原因
主题向订阅端推送消息时,下列场景可能会出现订阅不可用的情况:
队列:主题订阅的队列不存在,即该订阅的队列被删除。
重要在删除队列之前,请确保该队列未订阅任何正在使用的主题,以免造成业务受损。
HTTP(S):当向HTTP(S)订阅者连续推送消息失败的次数过多时,轻量消息队列(原 MNS)会进行低速率推送,特定场景下可能会导致订阅推送服务事实性中断。
影响场景:
在此模式下,如果新消息持续产生,将导致大量消息堆积。
系统会持续尝试推送那些因堆积而过期的旧消息,由于推送速率低,这会导致新消息无法被及时推送,最终堆积至消息过期,从而使您的订阅服务事实性中断。
恢复方法:
修复服务端:首先,请确保您的 HTTP(S) 服务端已恢复正常,能够正确接收并响应
2xx状态码。重置消费位点:在控制台将该订阅的消费位点重置到当前时间。此操作会跳过所有已堆积的(包括过期的)旧消息,使系统立即开始推送最新的消息。
注意事项
推送退避机制无法主动启用或停用。
当不可用订阅异常持续时间超过消息保存时长时,超过保存时长的消息会被丢弃(如果设置了死信队列的话会被投递到死信队列)。所以,需要保证订阅者的可用性,或者为订阅配置死信策略。
推送退避机制应用于单个主题下的不可用订阅中的所有消息。