我已经设置了Laravel应用程序来从SQS队列中检索消息 . 在正常操作期间一切正常:在调度可排队作业时,消息将添加到队列中,队列工作程序从SQS获取消息并成功运行作业 .
但是,每当我使用SQS Web控制台中的“查看消息”功能时,我都会遇到问题 . 以下是重现的步骤:
-
进入SQS Web控制台
-
选择队列
-
运行"View Messages"以获取即将进入的消息的实时视图
-
过了一会儿,停止投票
-
现在已发布截获的消息
-
队列工作者抓取消息,但它们最终都是失败的作业
-
运行工匠队列:重试所有
-
现在失败的作业成功运行
为什么会这样?我在PHP 5.6上运行Laravel 5.2.41 .
1 回答
我弄清楚发生了什么:
当消息在实时视图中显示"intercepted"时,它们将从队列中取出 .
关闭实时视图时,消息将重新添加到队列中 . 然后根据消息的接收次数更新消息元数据 .
由于我的队列工作程序设置为仅重试一次,此时消息已超过重试次数(即收到的次数),并将作业标记为失败 .
为了解决这个问题,我在队列工作者中添加了一个额外的重试“缓冲区”: