Amazon Simple Notification Service
开发人员指南 (API Version 2010-03-31)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

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

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

Amazon SNS 只能在一次失败传输尝试之后尝试重试。当发生一次失败传输尝试后,Amazon SNS 需考虑下列情况。

  • HTTP 状态在 500-599 范围以内。

  • HTTP 状态在 200-599 范围以外。

  • 请求超时(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 使您的主题传输策略应用于所有的策略,在“View/Edit Topic Delivery Policies”对话框中点击“Ignore subscription override”。下列示意图显示了适用于所有订阅的主题级别传输策略,甚至自带订阅传输策略的订阅,因为订阅级别策略被专门地忽略。

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

设置最高接收费用

您可以通过设定最高接收费用,设置 Amazon SNS 每秒发送至已订阅的终端节点最大信息数量。Amazon SNS 将待发送的信息保存最长一个小时。信息保存一个小时后被删除。

  • 要设置适用于所有主题订阅的最大接收速率,请使用 Edit Topic Delivery Policy 对话框应用主题级别的设置。有关更多信息,请参阅 为一个主题设置最高接收费用

  • 要设置适用于特定订阅的最大接收速率,请使用 Edit Subscription Delivery Policy 对话框应用订阅级别的设置。有关更多信息,请参阅 为一个订阅设置最高接收费用

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

  1. 通过以下网址登录 AWS 管理控制台 并打开 Amazon SNS 控制台:https://console.amazonaws.cn/sns/v2/home

  2. 在左侧导航窗格中,单击 Topics,然后选择主题。

  3. 单击 Other actions 下拉列表,然后选择 Edit topic delivery policy

  4. Maximum receive rate 框中,键入一个整数值(例如 2)。

  5. 单击 Update policy 保存您的更改。

为一个订阅设置最高接收费用

  1. 通过以下网址登录 AWS 管理控制台 并打开 Amazon SNS 控制台:https://console.amazonaws.cn/sns/v2/home

  2. 在左侧导航窗格中,单击 Topics,然后选择一个主题 ARN。

  3. Topic Details 窗格中,选择一个订阅,然后单击 Edit topic delivery policy

  4. Maximum receive rate 框中,键入一个整数值(例如 2)。

  5. 单击 Update policy 保存您的更改。

即刻重试阶段

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

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

  1. 通过以下网址登录 AWS 管理控制台 并打开 Amazon SNS 控制台:https://console.amazonaws.cn/sns/v2/home

  2. 在左侧导航窗格中,单击 Topics,然后选择一个主题 ARN。

  3. Topic Details 窗格中,从 Other topic actions 下拉列表中选择 Edit topic delivery policy

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

  5. 单击 Update policy 保存您的更改。

前退避阶段

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

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

  1. 通过以下网址登录 AWS 管理控制台 并打开 Amazon SNS 控制台:https://console.amazonaws.cn/sns/v2/home

  2. 在左侧导航窗格中,单击 Topics,然后选择一个主题 ARN。

  3. Topic Details 窗格中,从 Other topic actions 下拉列表中选择 Edit topic delivery policy

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

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

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

  6. 单击 Update policy 保存您的更改。

退避阶段

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

重要

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

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

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

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

  • 重试退避功能–重试退避功能定义了 Amazon SNS 用作计算在退避阶段中与延迟相关的所有重试尝试(第一次到最后一次)的运算方法。

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

  • 线性的

  • 算术的

  • 几何的

  • 指数的

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

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

后退避阶段

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

设置后退避阶段重试次数

  1. 通过以下网址登录 AWS 管理控制台 并打开 Amazon SNS 控制台:https://console.amazonaws.cn/sns/v2/home

  2. 在左侧导航窗格中,单击 Topics,然后选择一个主题 ARN。

  3. Topic Details 窗格中,从 Other topic actions 下拉列表中选择 Edit topic delivery policy

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

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

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

  6. 单击 Update policy 保存您的更改。