Amazon SQS 中死信队列的故障排除和最佳实践 - Amazon Simple Queue Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

Amazon SQS 中死信队列的故障排除和最佳实践

本节概述了常见的 DLQ 问题以及如何解决这些问题。

使用 Amazon 为死信队列创建警报 CloudWatch

您可以使用 Amazon CloudWatch 和指标为移至死信队列的任何消息配置警报。ApproximateNumberOfMessagesVisible有关更多信息,请参阅 为 Amazon SQS 指标创建 CloudWatch 警报。收到消息已发送到死信队列的警报后,您可以使用轮询来查看消息以接收消息。

使用控制台查看消息可能会导致消息移至死信队列

在控制台中根据相应队列的重新驱动策略查看消息时,Amazon SQS 将进行计数。因此,如果在控制台中查看消息的次数达到相应队列的重驱动策略中指定的次数,则该消息将移至相应队列的死信队列中。

要调整此行为,您可以执行下列操作之一:

  • 针对相应队列的重新驱动策略增大 Maximum Receives 设置。

  • 避免在控制台中查看相应队列的消息。

死信队列的 NumberOfMessagesSentNumberOfMessagesReceived 不匹配

如果您手动向死信队列发送消息,它将由 NumberOfMessagesSent 指标捕获。不过,如果因处理尝试失败而发送消息到死信队列,则此指标不会捕获该消息。因此,NumberOfMessagesSentNumberOfMessagesReceived 的值可能不同。

有关创建和配置死信队列重新驱动的信息

死信队列重新驱动需要您为 Amazon SQS 设置相应的权限,以接收来自死信队列的消息并将消息发送到目标队列。如果您没有正确的权限,则死信队列重新驱动任务可能会失败。您可以查看消息重新驱动任务的状态,以修复问题并重试。

标准队列和 FIFO 队列处理消息失败的方式不同

标准队列会一直处理消息,直到保留期到期。这种持续处理可最大限度地减少队列被未消耗的消息阻塞的机会。如果有大量消息消费者反复无法删除,则会增加成本,并给硬件带来额外的负担。为了降低成本,请将失败的消息移至死信队列。

标准队列还允许大量的飞行中消息。如果您的大部分消息无法使用且未发送到死信队列,则您的消息处理速度可能会减慢。要保持队列的效率,请确保您的应用程序正确处理消息。

FIFO 队列通过按顺序使用消息组中的消息,确保仅处理一次。因此,尽管使用者可继续检索另一个消息组中的有序消息,但在阻止队列的消息得到成功处理或移动到死信队列之前,第一个消息组将保持不可用状态。

此外,FIFO 队列允许减少传输中消息的数量。要防止 FIFO 队列被消息阻止,请确保您的应用程序正确处理消息。

有关更多信息,请参阅 亚马逊 SQS 消息配额使用 Amazon SQS 消息