我已经使用“ beanstalkd”队列驱动程序在Laravel 5.4上配置了一个队列...我将其部署在CentOS 7(cPanel)上并安装了Supervisor ...但是我有两个主要问题>
在日志中,我发现此异常“ local.ERROR:异常'PDOException',消息为'SQLSTATE [42S02]:基表或视图未找到:1146表'{dbname} .failed_jobs'未找到存在”,因此问题#1 是..我应该为“ beanstalkd”队列驱动程序配置任何数据库表吗?如果可以,请说明这些表的结构吗?
我还按如下所示在Supervisor配置文件中配置了queue:work命令
[program:test-queue] process_name=%(program_name)s_%(process_num)02d command=php /home/****/****/artisan queue:work beanstalkd --sleep=3 --tries=3 autostart=true autorestart=true user=gcarpet numprocs=8 redirect_stderr=true stdout_logfile= /home/*****/*****/storage/logs/supervisor.log
我发现,即使在第一个呼叫“已处理”之后,supervisor.log仍包含多次呼叫。.问题2 ,我一次调度了该任务,但该任务已被推送多次进入队列,我需要一个解决方案来解决这个问题,我不想同一作业在队列中多次推送?
[2019-05-14 09:08:15] Processing: App\Jobs\{JobName} [2019-05-14 09:08:15] Processing: App\Jobs\{JobName} [2019-05-14 09:08:15] Failed: App\Jobs\{JobName} [2019-05-14 09:08:24] Processed: App\Jobs\{JobName} [2019-05-14 09:08:24] Processing: App\Jobs\{JobName} [2019-05-14 09:08:33] Processed: App\Jobs\{JobName} [2019-05-14 09:08:33] Processing: App\Jobs\{JobName} [2019-05-14 09:08:41] Processed: App\Jobs\{JobName} [2019-05-14 09:08:41] Processing: App\Jobs\{JobName} [2019-05-14 09:08:41] Failed: App\Jobs\{JobName}
答案 0 :(得分:2)
php artisan queue:failed-table
php artisan migrate
此行为由队列工作人员在命令行中接收到的“ tries”选项指定
php artisan queue:work --tries=3
...或特定作业的tries
属性。
<?php
namespace App\Jobs;
class Reader implements ShouldQueue
{
public $tries = 5;
}
您当前看到作业重试3次,然后失败。
检查您的日志记录输出和failed_jobs
表,以查看抛出了哪些异常并适当地修复了这些异常。
只要handle
方法抛出,作业就会重试。
重试几次后,将fail
作业和failed()
方法被调用。
失败的作业将存储在failed_jobs
表中,以供以后参考或manual retrying。
--timeout值应始终至少比retry_after配置值短几秒钟。这将确保在重试作业之前,始终杀死处理给定作业的工人。如果您的--timeout选项比您的retry_after配置值长,则您的作业可能会被处理两次。