Amazon Simple Notification Service
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

设置Amazon SNS用于 HTTP/HTTPS 终端节点的传输重试策略

Amazon SNS 成功传输到一个 HTTP/HTTPS 终端节点有时需要不只一次的尝试。例如,如果寄宿订阅的终端节点的网络服务器发生故障在维修或发生了严重流量不畅,那么这种情况就会产生。如果首次传输尝试未能从订阅者产生成功反应,那么 Amazon SNS 应再次发送信息。我们称这样的尝试为重试。换句话说,重试是在首次输出尝试之后产生的一次尝试性传输。

Amazon SNS 仅在传输尝试失败后才尝试重试。Amazon SNS 将以下情况视为失败的传输尝试:

  • HTTP 状态代码 100-101 和 500-599(含端值)。

    注意

    Amazon SNS 考虑 HTTP 状态代码 400-499 以指示永久传输失败。

  • 请求超时(15 秒)。

    注意

    如果发生请求超时,那么超时后在指定间隔期间内会有下一次重试。例如,如果重试间隔时间是 20 秒发生一次请求超时,那么在这次请求开始超时后下次请求开始的时间是 35 秒。

  • 一些连接错误包括连接超时、终端节点不可达、不合格 SSL 证书等。

为了不仅能控制重试的总次数,而且控制每次重试之间的时间延迟长度,您可使用传输策略。您最多可以在四个单独的阶段中总共指定 100 次重试。系统中一个信息的最长寿命是 1 个小时。不能通过传输策略延长 1 个小时界限。


          Amazon SNS 传输策略四阶段图。
  1. 即刻重试阶段也称作无延迟阶段,此阶段在首次传输尝试结束后立即发生。您为无延迟重试设定的值在首次传输尝试结束后立即决定重试的次数。在该阶段中重试之间没有延迟。

  2. 前退避阶段前退避阶段紧随即刻重试阶段。使用该阶段创建一组在退避功能应用于重试之前发生的重试。使用最短延迟重试以指定前退避阶段的重试次数。您可使用最短延迟设置控制该阶段中重试操作之间的延迟时间。

  3. 退避阶段因为您能在此阶段通过重试退避功能控制重试操作之间的延迟,所以这个阶段称为退避阶段。设置最小延迟最大延迟,然后选择一项重试退避功能确定延迟时间从最小延迟到最大延迟的增长有多快。

  4. 后退避阶段后退避阶段紧随退避阶段。使用最长延迟时间重试操作,以指定后退避阶段中的重试次数。您可使用最长延迟设置控制该阶段中重试操作之间的延迟时间。

退避阶段不是最常用的阶段。如果未设置传输策略,系统默认值将在退避阶段重试三次,那么每次重试之间的时间间隔为 20 秒。最短延迟最高延迟的默认值均为 20 秒。默认重试次数是 3 次,所以默认重试策略要求执行 3 次重试,每次重试之间的时间间隔为 20 秒。下列示意图表示每次重试相关的延迟。


          Amazon SNS 默认传输策略图。

如需要了解重试退避功能是如何影响重试之间的延时,您可设置最长延迟时间为 40 秒并且让其他设置处于默认值。通过这种变更,现在您的传输策略在退避阶段指定为 3 次重试,最短延迟时间为 20 秒,最长延迟时间为 40 秒。因为默认退避功能是线性的,因此在退避阶段执行过程中,消息之间的延迟时间以恒速增加。Amazon SNS 在 20 秒钟后执行第一重试,第二次重试在 30 秒后,最后一次在 40 秒后。下列示意图表示每次重试相关的延迟。


          Amazon SNS 默认传输策略图(最大延迟设为 40 秒)。

系统中一个信息的最长寿命是 1 个小时。不能通过传输策略延长 1 个小时界限。

注意

传输策略只支持 HTTP 和 HTTPS 订阅类型。当前不支持其他 Amazon SNS 订阅类型(如电子邮件、Amazon SQS 和 SMS)。

将传输策略应用于主题和订阅

您可将传输策略应用于 Amazon SNS 主题。如果您在一个主题上设置一个传输策略,该策略将会应用于该主题的所有订阅。下列示意图说明了拥有传输策略的主题,这个传输策略可应用于与主题相关的 3 个订阅。


            拥有三个 HTTP 订阅和一个主题传输策略的 Amazon SNS 主题。

您也可以将传输策略应用于个人订阅。如果您为订阅分配一个传输策略,那么订阅级别的策略将优先于主题级别的传输策略。在下列示意图中,一个订阅有一个订阅级别传输策略,然而其他两种订阅没有订阅级别传输策略。


            拥有三个 HTTP 订阅、一个主题传输策略和一个订阅传输策略的 Amazon SNS 主题。

在某些情况下,即使一个订阅已经设定好了它的传输策略,您也可能想忽略所有订阅传输策略,以便您的主题传输策略应用于所有订阅。要配置 Amazon SNS 以使您的主题传输策略应用于所有策略,请在查看/编辑主题传输策略对话框中选择忽略订阅覆盖。下列示意图显示了适用于所有订阅的主题级别传输策略,甚至自带订阅传输策略的订阅,因为订阅级别策略被专门地忽略。


            拥有三个 HTTP 订阅、一个主题传输策略和一个被 Amazon SNS 忽略的订阅传输策略的 Amazon SNS 主题。

设置最高接收费用

可以设置 Amazon SNS 每秒向已订阅的终端节点发送的消息的最大数量。Amazon SNS 将待发送的消息最长保留 1 小时。经过一个小时后,Amazon SNS 将丢弃消息。

为一个主题设置最高接收费用

  1. 登录 Amazon SNS 控制台

  2. 在导航面板上,选择主题,然后选择主题的名称。

  3. 我的主题页面上,选择编辑

  4. 编辑我的主题页面上,展开 Delivery retry policy (HTTP/S) (传输重试策略 (HTTP/S)) 部分并指定 Maximum retry rate (最大重试速率)

  5. 选择 Save changes

即刻重试阶段

即刻重试阶段在首次传输尝试后立即开始。这个阶段又称作无延迟阶段,因为它发生时在重试之间没有时间延长。为这个阶段设置的默认重试次数为零次。

设置即刻重试阶段的重试次数

  1. 登录 Amazon SNS 控制台

  2. 在导航面板上,选择主题,然后选择主题 ARN。

  3. 主题详细信息部分中,从其他主题操作下拉列表中选择编辑主题传输策略

  4. Retries with no delay 框中,键入一个整数值。

  5. 选择更新策略保存所做更改。

前退避阶段

前退避阶段紧随即刻重试阶段。如果您想创建一组有一个或一个以上在退避功能影响重试之间的延迟之前发生的重试,那么使用这个阶段。在这个阶段,重试之间的时间是不变的,并且与您为最长延迟选择的设置时间一样。最小延迟设置影响两个阶段中的重试 — 它适用于前退避阶段的所有重试,并且作为退避阶段中重试的初始延时。为这个阶段设置的默认重试次数为零次。

设置前退避阶段重试次数。

  1. 登录 Amazon SNS 控制台

  2. 在导航面板上,选择主题,然后选择主题 ARN。

  3. 主题详细信息部分中,从其他主题操作下拉列表中选择编辑主题传输策略

  4. Minimum delay retries 框中,键入一个整数值。

  5. Minimum delay 框中,键入一个整数值,以设置此阶段中消息之间的延迟时间。

    设置的值必须小于或等于您为 Maximum delay (最大延迟) 设置的值。

  6. 选择更新策略保存所做更改。

退避阶段

退避阶段是唯一通过默认方式应用的阶段。您能通过使用重试次数控制退避阶段的重试次数。

重要

您为重试次数选择的值代表重试的总次数,包括您为无延迟重试最短延迟重试最长延迟重试设置的重试。

您可利用 3 个参数控制退避阶段的重试频率。

  • 最短延迟 — 最短延迟定义了在退避阶段中与第一次重试尝试相关的延迟。

  • 最长延迟 — 最长延迟定义了在退避阶段中与最后一次重试尝试相关的延迟。

  • 重试退避功能 — 重试退避功能定义了 Amazon SNS 用于计算延迟的算法,这些延迟与退避阶段中从第一次到最后一次重试之间的所有重试尝试相关。

您可以从四个重试退避功能进行选择。

  • 线性的

  • 算术的

  • 几何的

  • 指数的

下列截图显示了在退避期间各个重试退避功能如何影响与信息相关联的延迟。纵轴以秒为单位表示与 10 次重试中的每个重试相关的延迟。横轴代表重试的次数。最短延迟时间为 5 秒,最长延迟时间为 260 秒。


            显示四个退避重试功能的图表

后退避阶段

后退避阶段是最后一个阶段。如果您想在创建一组一个或一个以上在退避功能影响重试之间的延迟时间之后发生的重试,那么您可使用这个阶段。在这个阶段中,重试之间的时间是不变并且与您为最长延迟时间选择的时间一样。最大延迟设置影响两个阶段中的重试—它适用于后退避阶段的所有重试,并且作为退避阶段中重试的最终延时。为这个阶段设置的默认重试次数为零次。

设置后退避阶段重试次数

  1. 登录 Amazon SNS 控制台

  2. 在导航面板上,选择主题,然后选择主题 ARN。

  3. 主题详细信息部分中,从其他主题操作下拉列表中选择编辑主题传输策略

  4. Maximum delay retries 框中,键入一个整数值。

  5. Maximum delay 框中,键入一个整数值,以设置此阶段中消息之间的延迟时间。

    设置的值必须大于或等于您为 Minimum delay (最小延迟) 设置的值。

  6. 选择更新策略保存所做更改。