Laravel 将消息发送回 SQS 时队列工作程序作业失败
Laravel queue worker jobs fail when messages are sent back to SQS
我已经将我的 Laravel 应用程序设置为从 SQS 队列检索消息。在正常操作期间一切正常:当调度可排队作业时,消息被添加到队列中,队列工作人员从 SQS 获取消息并成功 运行s 作业。
但是,每当我在 SQS Web 控制台中使用 "View Messages" 功能时,我 运行 都会遇到问题。以下是重现步骤:
- 进入 SQS 网络控制台
- Select队列
- 运行 "View Messages" 实时查看收到的消息
- 一段时间后,停止轮询
- 之前被拦截的消息现已发布
- 队列工作人员抓取消息,但它们都以失败的作业结束
- 运行 artisan queue:retry 全部
- 现在失败的作业运行成功
为什么会这样?我 运行宁 Laravel 5.2.41 PHP 5.6.
我知道发生了什么:
- 当消息 "intercepted" 显示在实时视图中时,它们将从队列中取出。
- 当您关闭实时视图时,消息会重新添加到队列中。然后,消息元数据会根据收到消息的次数进行更新。
- 由于我的队列工作器设置为仅重试一次,此时消息已超过重试次数(即收到的次数)并将作业标记为失败。
为了解决这个问题,我向我的队列工作人员添加了额外的重试 "buffer":
php artisan queue:work redis --tries=3
我已经将我的 Laravel 应用程序设置为从 SQS 队列检索消息。在正常操作期间一切正常:当调度可排队作业时,消息被添加到队列中,队列工作人员从 SQS 获取消息并成功 运行s 作业。
但是,每当我在 SQS Web 控制台中使用 "View Messages" 功能时,我 运行 都会遇到问题。以下是重现步骤:
- 进入 SQS 网络控制台
- Select队列
- 运行 "View Messages" 实时查看收到的消息
- 一段时间后,停止轮询
- 之前被拦截的消息现已发布
- 队列工作人员抓取消息,但它们都以失败的作业结束
- 运行 artisan queue:retry 全部
- 现在失败的作业运行成功
为什么会这样?我 运行宁 Laravel 5.2.41 PHP 5.6.
我知道发生了什么:
- 当消息 "intercepted" 显示在实时视图中时,它们将从队列中取出。
- 当您关闭实时视图时,消息会重新添加到队列中。然后,消息元数据会根据收到消息的次数进行更新。
- 由于我的队列工作器设置为仅重试一次,此时消息已超过重试次数(即收到的次数)并将作业标记为失败。
为了解决这个问题,我向我的队列工作人员添加了额外的重试 "buffer":
php artisan queue:work redis --tries=3