AWS SQS:延迟提供无法处理的消息
AWS SQS: Delay making available a message that failed to process
这是我的场景:
- 我有一个处理大量任务的 SQS 队列。这些任务可能而且经常会失败。他们的失败很常见,也有些意料之中。
- 当任务失败时,我想在一定时间后重试,并在重试一定次数后将项目失败放入 DLQ。我不想立即重试。
我有一个处理这些任务的工作 EB 应用程序。当它成功时,我 return 200(任务成功地从队列中移除)。当它失败时,我 return 404,任务立即 returned 到队列中(因此,立即重试)。这不是我们想要的,我想在重试之前延迟这个失败的项目。
是否可以结合使用可见性超时和延迟队列来做到这一点?
回答了我自己的问题,结果我找错了地方(SQS 配置选项,而不是 EB 配置选项)。我正在寻找的魔术设置是 EB 配置选项中的 "error visibility timeout",它允许您控制失败的项目在返回其队列之前的时间量。
您可以使用 SQS 本机执行此操作,方法是在您刚刚处理失败的消息上调用 ChangeMessageVisibility 并将 VisibilityTimeout 设置为您想要的任何值:http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ChangeMessageVisibility.html
这是我的场景:
- 我有一个处理大量任务的 SQS 队列。这些任务可能而且经常会失败。他们的失败很常见,也有些意料之中。
- 当任务失败时,我想在一定时间后重试,并在重试一定次数后将项目失败放入 DLQ。我不想立即重试。
我有一个处理这些任务的工作 EB 应用程序。当它成功时,我 return 200(任务成功地从队列中移除)。当它失败时,我 return 404,任务立即 returned 到队列中(因此,立即重试)。这不是我们想要的,我想在重试之前延迟这个失败的项目。
是否可以结合使用可见性超时和延迟队列来做到这一点?
回答了我自己的问题,结果我找错了地方(SQS 配置选项,而不是 EB 配置选项)。我正在寻找的魔术设置是 EB 配置选项中的 "error visibility timeout",它允许您控制失败的项目在返回其队列之前的时间量。
您可以使用 SQS 本机执行此操作,方法是在您刚刚处理失败的消息上调用 ChangeMessageVisibility 并将 VisibilityTimeout 设置为您想要的任何值:http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ChangeMessageVisibility.html