【问题标题】:Laravel queue worker jobs fail when messages are sent back to SQS将消息发送回 SQS 时,Laravel 队列工作者作业失败
【发布时间】:2017-09-16 04:21:45
【问题描述】:

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

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

  • 进入 SQS Web 控制台
  • 选择队列
  • 运行“查看消息”以实时查看传入的消息
  • 一段时间后,停止轮询
  • 被拦截的消息现在被释放
  • 队列工作者抓取了消息,但它们都以失败的作业告终
  • 运行工匠队列:全部重试
  • 失败的作业现在可以成功运行

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

【问题讨论】:

  • 呃,这也发生在我身上……有什么解决办法吗?

标签: php laravel queue amazon-sqs


【解决方案1】:

我知道发生了什么:

  • 当消息被“拦截”以显示在实时视图中时,它们会从队列中取出。
  • 当您关闭实时视图时,消息会重新添加到队列中。然后使用已接收到消息的次数来更新消息元数据。
  • 由于我的队列工作器设置为仅重试一次,因此此时消息已超过重试次数(也就是接收到的次数),并将作业标记为失败。

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

php artisan queue:work redis --tries=3

【讨论】:

猜你喜欢
  • 2018-08-16
  • 1970-01-01
  • 2017-02-07
  • 1970-01-01
  • 2014-11-19
  • 2021-06-13
  • 1970-01-01
  • 2023-04-07
  • 2016-06-19
相关资源
最近更新 更多