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

Amazon SQS 消息定时器

Amazon SQS 消息定时器允许您为要添加到队列的消息指定初始不可见时段。例如,如果您发送一条消息并将 DelaySeconds 参数设置为 45,则使用者在该消息进入队列后的前 45 秒看不到该消息。DelaySeconds 的默认值为 0

注意

FIFO 队列不支持单个消息上的计时器。

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

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

要设置适用于队列中所有消息的延迟时段,请使用延迟队列。各条消息的消息定时器设置会覆盖适用于整个延迟队列的任何 DelaySeconds 值。

使用控制台创建消息定时器

使用 AWS 管理控制台发送带有消息定时器的消息

  1. 选择队列。

  2. Queue Actions 下拉列表中,选择 Send a Message

    注意

    仅在已选中队列的情况下,Queue Actions 下拉列表才可用。

  3. Send a Message to MyQueue 对话框中,键入消息。

  4. Delay delivery of this message by 文本框中,输入延迟值 (例如,30)。

  5. 选择 Send Message

  6. Send a Message to MyQueue 确认框中,选择 Close

使用查询 API 创建消息定时器

以下查询 API 示例会为使用 SendMessage 发送的单一消息应用 45 秒的初始可见性延迟。

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

Copy
http://sqs.us-east-2.amazonaws.com/123456789012/testQueue/ ?Action=SendMessage &MessageBody=This+is+a+test+message &DelaySeconds=45 &Version=2012-11-05 &Expires=2015-12-18T22%3A52%3A43PST &AUTHPARAMS

注意

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

此外,您还可以使用查询 API 的 SendMessageBatch 操作来发送最多 10 条带有消息定时器的消息。您可以为每条消息分配不同的 DelaySeconds 值,或者完全不分配任何值。如果您不为 DelaySeconds 设置值,则在将消息添加到延迟队列时,消息仍然可能会延迟。有关延迟队列的更多信息,请参阅“Amazon SQS 延迟队列”。以下示例会使用 SendMessageBatch 发送三条消息:一条不带消息定时器的消息,以及两条具有不同的 DelaySeconds 值的消息。

Copy
http://sqs.us-east-2.amazonaws.com/123456789012/testQueue/ ?Action=SendMessageBatch &SendMessageBatchRequestEntry.1.Id=test_msg_no_message_timer &SendMessageBatchRequestEntry.1.MessageBody=test%20message%20body%201 &SendMessageBatchRequestEntry.2.Id=test_msg_delay_45_seconds &SendMessageBatchRequestEntry.2.MessageBody=test%20message%20body%202 &SendMessageBatchRequestEntry.2.DelaySeconds=45 &SendMessageBatchRequestEntry.3.Id=test_msg_delay_2_minutes &SendMessageBatchRequestEntry.3.MessageBody=test%20message%20body%203 &SendMessageBatchRequestEntry.3.DelaySeconds=120 &Version=2012-11-05 &Expires=2015-12-18T22%3A52%3A43PST &AUTHPARAMS