我在应用程序中使用Laravel队列,我有以下配置,
.env :
BROADCAST_DRIVER=log
CACHE_DRIVER=file
QUEUE_CONNECTION=database
SESSION_DRIVER=file
config / queue.config
'default' => env('QUEUE_CONNECTION', 'sync'),
'connections' => [
'sync' => [
'driver' => 'sync',
],
'database' => [
'driver' => 'database',
'table' => 'jobs',
'queue' => 'default',
'retry_after' => 90,
]
]
我已设置supervisor
,并且具有以下配置
/etc/supervisor/conf.d/laravel_queue.sh
[program:laravel_queue]
process_name=%(program_name)s_%(process_num)02d
command=php /usr/local/bin/run_queue.sh
startsecs = 0
autostart=true
autorestart=true
user=root
redirect_stderr=true
stderr_logfile=/var/log/laraqueue.err.log
stdout_logfile=/var/log/laraqueue.out.log
/usr/local/bin/run_queue.sh
php /var/www/myproject/artisan queue:work --tries=1
问题:
当我设置QUEUE_CONNECTION=sync
时,它可以正常工作,但是作业是同步执行的。我希望它们异步执行。因此,当我设置QUEUE_CONNECTION=database
时,我的作业根本不会执行,并且可以看到它们位于我的jobs
表中。
我还观察到,当我直接从项目目录运行php artisan queue:work
时,它可以按预期工作,也就是说,作业是异步执行的。
在这方面的任何帮助都将受到赞赏。
答案 0 :(得分:1)
我不确定Laravel 5.8,但是我为Laravel 5.3设置了以下内容
// Define the queue driver
php /var/www/myproject/artisan queue:work database --tries=1
,并在监管配置文件中定义numprocs=1
。
答案 1 :(得分:1)
来自Queue section of the Laravel docs (5.4):
配置主管
Supervisor配置文件通常存储在
/etc/supervisor/conf.d
目录。在此目录中,您可以 创建任意数量的配置文件以指导主管 您的过程应受到监控。例如,让我们创建一个laravel-worker.conf
文件可以启动并监视queue:work
过程:[program:laravel-worker] process_name=%(program_name)s_%(process_num)02d command=php /home/forge/app.com/artisan queue:work sqs --sleep=3 --tries=3 autostart=true autorestart=true user=forge numprocs=8 redirect_stderr=true stdout_logfile=/home/forge/app.com/worker.log
在此示例中,
numprocs
指令将指示Supervisor 运行8个queue:work
进程并自动监视所有进程 如果它们失败,请重新启动它们。当然,您应该更改queue:work sqs
指令中的command
部分可以反映您的 所需的队列连接。启动主管
创建配置文件后,您可以更新 使用以下内容配置主管并启动流程 命令:
sudo supervisorctl reread sudo supervisorctl update sudo supervisorctl start laravel-worker:*
有关主管的更多信息,请咨询主管 documentation。
有关此命令(source)的简要说明:
- 重新读取-重新读取主管配置。不要更新或重新启动正在运行的服务。
- 更新-重新启动配置已更改的服务。通常在“重读”之后运行。
- 重新加载-重新读取超级用户配置,重新加载超级用户和超级用户,重新启动已启动的服务。
- 重新启动-重新启动服务
此外,this article可以解决您的问题。希望这会有所帮助。