与主管一起运行两个Laravel项目队列

时间:2019-11-21 09:47:52

标签: php laravel supervisord laravel-queue

您好,下面是一个项目的主管的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,其redisQUEUE_CONNECTION中为.envconfig文件应该做什么。在同一服务器上运行两个项目队列会不会有问题?

1 个答案:

答案 0 :(得分:1)

首先,如果两个项目位于不同的连接上(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, 
]