阿里云消息通知推送消息传输重试策略

消息传输重试策略

传输重试策略定义了当消息通知推送向订阅终端节点推送失败时候,如何进行消息重试。当传输重试策略完成规定的重试次数时候,除非为订阅配置死信队列,否则消息通知推送会停止重试并丢弃该消息。

消息通知推送的传输重试策略
终端节点类型立即重试最小延迟重试/间隔时间退避重试/退避策略最大延迟重试/间隔时间总尝试次数HTTP/S自定义(默认0次)自定义(默认0次)自定义(默认3次,线性退避(20秒-20秒))自定义(默认0次)自定义(默认3次)短信(SMS)0次2次,1秒10次,指数退避(1秒-10分钟)38次,10分钟50次邮件(Email)1次1次,10秒10次,线性退避(10秒-5分钟)90次,5分钟102次队列服务(JQS)10次100000次,20秒0次0次100010次函数服务(Funciton)0次2次,1秒10次,指数退避(1秒-20分钟)38次,20分钟50次

每个传输重试策略包含四个阶段。

  • 立即重试阶段–此阶段在首次推送失败后立即发生。在该阶段中重试之间没有时间间隔。
  • 最小时间间隔重试阶段–此阶段在立即重试阶段之后发生。在该阶段中重试之间时间间隔为最小延迟时间值。
  • 退避重试阶段–此阶段在最小时间间隔重试阶段之后发生。此阶段通过规定退避策略控制各个重试之间的延迟。此阶段设置了最短延迟时间、最大延迟时间和退避策略,该退避策略定义了延迟时间从最小值增加到最大值的速率。重试退避策略可以是算术、指数、几何或线性的。
  • 最大时间间隔重试阶段–此阶段在退避重试阶段之后发生。在该阶段中重试之间时间间隔为最大延迟时间值。
  • 自定义HTTP/S传输重试策略

用户可以根据业务的不同特性自定义HTTPS的传输重试策略。在主题或者订阅都可以定义HTTP/S传输策略。当HTTP/S订阅设置了订阅级别的传输重试策略将覆盖主题级别传输重试策略。(除非主题级别的传输策略勾选了忽略订阅覆盖,则主题级别的传输重试策略将覆盖订阅级别的。)

如果用户想要在传输重试的4个阶段设置如下策略:

总尝试次数:20次

  • 立即重试阶段:3次
  • 最小时间间隔重试阶段:4次,相隔20秒
  • 退避重试阶段:10次,线性退避,20秒到60秒
  • 最大时间间隔重试阶段:4次,相隔60秒
控制台设置

 

SDK设置-JSON预览

{"healthyRetryPolicy":{"numRetries":20,"numNoDelayRetries":3,"minDelayTarget":20,"maxDelayTarget":60,"numMinDelayRetries":4,"numMaxDelayRetries":4,"backoffFunction":"linear"},"disableSubscriptionOverrides":false}

JSON含义

传输策略包含一个重试策略和两个个限制策略。传输策略共有8个属性。

策略描述范围numRetries重试总数,包括立即重试、最小延迟重试、退避重试和最大延迟重试。0至100默认值:3numNoDelayRetries要立即完成的重试次数0或更多默认值:0minDelayTarget重试的最小延迟时间。单位:秒0至最大延迟时间默认值:20maxDelayTarget重试的最大延迟时间。单位:秒最小延迟时间至3600默认值:20numMinDelayRetries最小时间间隔重试阶段重试次数,各个重试之间有指定的最小延迟时间。0或更多,默认值:0numMaxDelayRetries最大时间间隔重试阶段的重试次数,各个重试之间有最大延迟时间。0或更多,默认值:0backoffFunction各个重试之间退避策略函数。四个选项之一:算术,指数,几何,线性,默认:线性maxReceivesPerSecond每个订阅每秒的最大传输次数。1或更多,默认:无限制disableSubscriptionOverrides是否覆盖订阅的传输重试策略true或false,默认:false

退避策略阶段的重试次数=

numRetries-numNoDelayRetries-numMinDelayRetries-numMaxDelayRetries

退避策略函数:

其中y为延迟时间,x为重试次数,y2为最大延迟时间,y1为最小延迟时间,x2为退避策略阶段重试次数,x1为1,α值控制横轴伸缩曲线

线性(α=1)

指数(α=10)

几何(α=4)

算数(α=2)