首页 文章

当消息发送回SQS时,Laravel队列工作程序作业失败

提问于
浏览
1

我已经设置了Laravel应用程序来从SQS队列中检索消息 . 在正常操作期间一切正常:在调度可排队作业时,消息将添加到队列中,队列工作程序从SQS获取消息并成功运行作业 .

但是,每当我使用SQS Web控制台中的“查看消息”功能时,我都会遇到问题 . 以下是重现的步骤:

  • 进入SQS Web控制台

  • 选择队列

  • 运行"View Messages"以获取即将进入的消息的实时视图

  • 过了一会儿,停止投票

  • 现在已发布截获的消息

  • 队列工作者抓取消息,但它们最终都是失败的作业

  • 运行工匠队列:重试所有

  • 现在失败的作业成功运行

为什么会这样?我在PHP 5.6上运行Laravel 5.2.41 .

1 回答

  • 0

    我弄清楚发生了什么:

    • 当消息在实时视图中显示"intercepted"时,它们将从队列中取出 .

    • 关闭实时视图时,消息将重新添加到队列中 . 然后根据消息的接收次数更新消息元数据 .

    • 由于我的队列工作程序设置为仅重试一次,此时消息已超过重试次数(即收到的次数),并将作业标记为失败 .

    为了解决这个问题,我在队列工作者中添加了一个额外的重试“缓冲区”:

    php artisan queue:work redis --tries=3
    

相关问题