AWS SQS:延迟使无法处理的消息可用

Posted

技术标签:

【中文标题】AWS SQS:延迟使无法处理的消息可用【英文标题】:AWS SQS: Delay making available a message that failed to process 【发布时间】:2015-12-04 13:40:38 【问题描述】:

这是我的场景:

我有一个处理多个任务的 SQS 队列。这些任务可能而且经常会失败。他们的失败很常见,在某种程度上是意料之中的。 当任务失败时,我想在一定时间后重试,并在重试一定次数后将项目失败到 DLQ。我不想立即重试。

我有一个处理这些任务的工作人员 EB 应用程序。当它成功时,我返回 200(并且该任务已成功从队列中删除)。当它失败时,我返回 404,并且任务立即返回到队列中(因此,立即重试)。这是不希望的,我想在重试之前延迟这个失败的项目。

是否可以结合可见性超时和延迟队列来做到这一点?

【问题讨论】:

【参考方案1】:

回答了我自己的问题,结果发现我找错了地方(SQS 配置选项,而不是 EB 配置选项)。我一直在寻找的神奇设置是 EB 配置选项中的“错误可见性超时”,它允许您控制失败项目在返回其队列之前的时间量。

【讨论】:

【参考方案2】:

您可以在 SQS 本地执行此操作,方法是对您刚刚未能处理的消息调用 ChangeMes​​sageVisibility 并将 VisibilityTimeout 设置为您想要的任何值:http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ChangeMessageVisibility.html

【讨论】:

以上是关于AWS SQS:延迟使无法处理的消息可用的主要内容,如果未能解决你的问题,请参考以下文章

当消息存在于 SQS 队列中时触发 AWS 中的 Lambda 函数

AWS SQS Boto3 手动将消息发送到死信

AWS SQS FIFO或AWS DynamoDB用于处理大量消息

使用SQS接收SES消息

AWS Lambda 在向 SQS 发送消息之前完成

AWS SQS JMS确认