嗨,下面是一个项目主管的config
文件
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /livesites/siteA.example.com/artisan queue:work database --sleep=3 --tries=3
autostart=true
autorestart=true
user=www-data
numprocs=8
redirect_stderr=true
stdout_logfile=/livesites/siteA.example.com/storage/logs/worker.log
运行良好。我还有另一个项目(siteB.example.com
),其中redis
作为QUEUE_CONNECTION
中的.env
。 config
文件应该做什么。在同一服务器上运行两个项目队列会不会有问题?
首先,如果两个项目位于不同的连接上(Redis和数据库)应该没有问题。
但是如果连接相同(都在数据库或Redis上,则一个解决方案可能为每个项目使用不同的队列。
例如,在siteA项目中将您的作业推送到siteA队列中,在siteB项目中将您的作业推送到siteB队列中。然后创建两个单独的超级用户配置文件,并在每个文件中将--queue=siteA
或--queue=siteB
放入artisan命令参数中。
siteA.conf:
command=php /livesites/siteA.example.com/artisan queue:work database --queue=siteA --sleep=3 --tries=3
siteB.conf:
command=php /livesites/siteB.example.com/artisan queue:work database --queue=siteB --sleep=3 --tries=3
最后,在您的Laravel代码中,将每个作业分配到适当的队列:
dispatch((new Job)->onQueue('siteA'));
在siteB项目中
dispatch((new Job)->onQueue('siteB'));
或者您可以在config / queue.php中全局更改每个项目的默认队列,如下所示:
'database' => [
'driver' => 'database',
'table' => 'jobs',
'queue' => 'siteA' // or siteB,
'retry_after' => 90,
]