本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
针对 Amazon SQS 中的 FIFO 节流问题进行排查
默认情况下,FIFO 队列支持每个 API 操作(SendMessage
、ReceiveMessage
和 DeleteMessage
)每秒 300 个事务。即使队列中有可用消息,请求超过每秒 300 个事务也会触发 ThrottlingException
错误。您可以使用以下方法来缓解这一问题:
-
使用 Amazon SQS API 批量操作
SendMessageBatch
、DeleteMessageBatch
和ChangeMessageVisibilityBatch
,将每个 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 队列没有返回所有消息或其他消息组中的消息?”