Amazon Simple Queue Service
开发人员指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

Amazon SQS 延迟队列

延迟队列让您可以将队列中新消息的传递操作推迟指定的秒数。如果您创建延迟队列,则发送到该队列的任何消息在延迟期间对使用者都不可见。通过将 DelaySeconds 属性设置为介于 0900 (15 分钟) 之间的任何值,您可以使用 CreateQueue 操作创建延迟队列。此外,通过使用 SetQueueAttributes 操作来设置队列的 DelaySeconds 属性,您还可以将现有队列更改为延迟队列。

注意

对于标准队列,每队列延迟设置是不可追溯的:如果您更改 DelaySeconds 属性,它不会影响队列中已有的消息的延迟。

对于 FIFO 队列,每队列延迟设置是可追溯的:如果您更改 DelaySeconds 属性,则会影响队列中已有的消息的延迟。

延迟队列类似于可见性超时,因为这两种功能都使得使用者在特定的时间段内无法获得消息。延迟队列和可见性超时之间的区别在于:对于延迟队列,消息在首次添加到队列时是隐藏的;而对于可见性超时,消息只有在从队列使用后才是隐藏的。下图说明了延迟队列和可见性超时之间的关系。

注意

如果消息已由使用者通过队列接收但尚未从队列中删除,则消息将被视为正在传送

对于每个标准队列,其传输中的消息的最大数目为 120000。如果您达到此限制,Amazon SQS 将返回 OverLimit 错误消息。为避免达到此限制,您应该在处理消息后将其从队列中删除。您还可以增加用来处理消息的队列的数量。

对于每个 FIFO 队列,其传输中的消息的最大数目为 20000。如果您达到此限制,Amazon SQS 不会返回任何错误消息。

要设置各条消息 (而不是整个队列) 的延迟秒数,请使用消息定时器。如果您发送一条带有消息定时器的消息,则 Amazon SQS 会使用消息定时器的延迟秒数值 (而不是延迟队列的延迟秒数值)。有关更多信息,请参阅 Amazon SQS 消息定时器

使用 AWS 管理控制台创建延迟队列

通过将 Delivery Delay 设置为大于 0 的值,您可以使用 AWS 管理控制台创建延迟队列。

使用 AWS 管理控制台创建延迟队列

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

  2. 选择 Create New Queue

  3. Create New Queue 对话框中,键入您的 Queue Name

  4. 对于 Delivery Delay,键入一个正整数值。

  5. 选择 Create Queue

通过在选中现有队列时选择 Configure Queue 操作,您可以使用 AWS 管理控制台更改现有队列的 Delivery Delay 设置。

为现有队列设置新的传递延迟值

  1. 选择现有队列,然后从 Queue Actions 下拉框中选择 Configure Queue

  2. Delivery Delay 值更改为正整数。

  3. 选择 Save Changes

使用查询 API 创建延迟队列

以下查询 API 示例会调用 CreateQueue 操作来创建延迟队列,该延迟队列会在每条消息进入队列后的前 45 秒对使用者隐藏该消息。

您如何构造 AUTHPARAMS 取决于您签署 API 请求的方式。有关签名版本 4 中 AUTHPARAMS 的信息,请参阅已签名的签名版本 4 请求示例

Copy
http://sqs.us-east-2.amazonaws.com/ ?Action=CreateQueue &QueueName=testQueue &Attribute.1.Name=DelaySeconds &Attribute.1.Value=45 &Version=2012-11-05 &Expires=2015-12-20T22%3A52%3A43PST &AUTHPARAMS

注意

队列名称和队列 URL 区分大小写。

此外,通过将 DelaySeconds 属性从默认值 0 更改为小于或等于 900 的正整数值,您还可以将现有队列更改为延迟队列。以下示例会调用 SetQueueAttributes 将名为 testQueue 的队列的 DelaySeconds 属性设置为 45 秒。

Copy
http://sqs.us-east-2.amazonaws.com/123456789012/testQueue/ ?Action=SetQueueAttributes &DelaySeconds=45 &Version=2012-11-05 &Expires=2015-12-20T22%3A52%3A43PST &AUTHPARAMS