laravel - Beanstalkd 队列要么失败,要么无限运行
问题描述
我正在使用 Beanstalkd 队列在我的 Laravel 5.3 应用程序中部署作业。我使用 Laravel Forge 来管理服务器。
我有两种情况之一:
1)我设置了最大尝试次数,这会导致推送到队列的每个作业都放在失败的作业表上 - 即使其任务成功完成,也会导致作业表上出现此异常:
Illuminate\Queue\MaxAttemptsExceededException: A queued job has been attempted too many times. The job may have previously timed out
这在我的错误日志中:
Pheanstalk\Exception\ServerException: Server reported NOT_FOUND
2)如果我删除最大尝试,作业会成功运行,但会无限循环。
我假设我没有正确地从队列中删除这些作业,因此在场景 #1 中,作业失败是因为只想继续运行。
我的控制器将我的工作推送到队列中,如下所示:
Queue::push('App\Jobs\UpdateOutlookContact@handle', ['userId' => $cs->user_id, 'memberId' => $member->id, 'connection' => $connection]);
这是我工作的句柄功能:
public function handle($job, $data)
{
Log::info('Outlook syncMember Job dispatched');
$outlook = new Outlook();
$outlook->syncMember($data['userId'], $data['memberId'], $data['connection']);
$job->delete();
}
这是 Laravel Forge 管理面板中我的队列配置的图片。我目前正在使用默认队列。如果“Tries”更改为 ANY,则作业会成功,但会在无限循环中运行。
如何正确地从队列中删除这些作业?
解决方案
推荐阅读
- generics - 没有候选解释与实际情况匹配,ADA 中的问题编码与泛型
- java - 如何更改按钮大小以不占用整个框架?
- java - 为什么我添加字符时会得到一个数字?
- rust - 返回值的 Rust 生命周期问题
- tomcat - WSO2IS 5.3.0 - 升级 tomcat jar
- opengl - SDL 中的静态流和目标纹理有什么区别?
- java - 如何使所有 cookie(甚至非 JSESSIONID cookie)成为“仅限 http”?
- android - Android Studio 拒绝连接到 React Native Server
- php - 以返回查询字符串结束的长 PHP 响应
- javascript - 使用可拖动 Javascript 时获取前一个元素的 ID