针对 Amazon SQS 中的 FIFO 节流问题进行排查 - Amazon Simple Queue Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

针对 Amazon SQS 中的 FIFO 节流问题进行排查

默认情况下,FIFO 队列支持每个 API 操作(SendMessageReceiveMessageDeleteMessage)每秒 300 个事务。即使队列中有可用消息,请求超过每秒 300 个事务也会触发 ThrottlingException 错误。您可以使用以下方法来缓解这一问题:

  • 为 Amazon SQS 中的 FIFO 队列启用高吞吐量.

  • 使用 Amazon SQS API 批量操作 SendMessageBatchDeleteMessageBatchChangeMessageVisibilityBatch,将每个 API 操作的 TPS 上限提高到每秒最多 3000 条消息,同时降低成本。对于 ReceiveMessage API,设置 MaxNumberofMessages 参数,以便在每个事务中最多接收 10 条消息。有关更多信息,请参阅 亚马逊SQS批量操作

  • 对于具有高吞吐量的 FIFO 队列,请按照建议优化分区利用率。批量发送具有相同消息组 ID 的消息。使用来自同一 ReceiveMessage API 请求的接收句柄批量删除消息或更改消息可见性超时值。

  • 增加唯一 MessageGroupId 值的数量。这有助于在 FIFO 队列分区之间实现均匀分配。有关更多信息,请参阅“Using the Amazon SQS message group ID”。

有关更多信息,请参阅《Amazon Knowledge Center 指南》中的“为什么我的 Amazon SQS FIFO 队列没有返回所有消息或其他消息组中的消息?”