首页 > 解决方案 > 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,则作业会成功,但会在无限循环中运行。
在此处输入图像描述

如何正确地从队列中删除这些作业?

标签: laravelbeanstalkd

解决方案


推荐阅读