我们正在使用Beanstalk上的工作层发送webhook。如果在联系第三方时出现任何错误,我们需要使用指数退避。但是,我不清楚这是如何工作的。
如果作业失败并且我调用ChangeMessageVisibility
来增加退避时间,我有两个选择:
来自Environment Tiers - AWS Beanstalk:
工作者环境层中的Web应用程序应该只监听 当地主人。当工作环境中的Web应用程序时 tier返回200 OK响应,以确认它已收到和 成功处理了请求后,守护进程发送了一个DeleteMessage 调用SQS队列,以便从中删除该消息 队列。 (SQS会自动删除队列中的消息 比配置的RetentionPeriod更长。)如果是应用程序 返回除200之外的任何响应,然后Elastic Beanstalk等待 在配置完成后将消息放回队列中 VisibilityTimeout期间。如果没有回应,那么弹性 Beanstalk等待将消息放回队列之后 InactivityTimeout期间,以便该消息可供另一个使用 试图加工。
答案 0 :(得分:5)
Create<Type>
的限制为12小时,仅适用于 inflight 作业(在他们正在运行时,您想要通知SQS的作业“我需要更多时间来完成此操作”)。
唯一的解决方案是在队列中创建具有相同详细信息的新作业和用于重试的附加计数器(在消息中或作为属性),并使用具有基于ChangeMessageVisibility
的指数退避的DelaySeconds。
不幸的是retries + 1
有15分钟(900秒)的限制,因此您安排的工作时间比您有几个选项的时间长:
答案 1 :(得分:0)
增加失败的作业的ChangeMessageVisibility具有优点和缺点:
优点:
缺点:
因此,减轻弊端的一个办法是,如果作业失败太多次,则将重新驱动策略设置为dlq。