运行 两个 Laravel 项目与主管排队

Running two Laravel projects queues with supervisor

您好下面是一个项目的主管的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 作为 .env 中的 QUEUE_CONNECTIONconfig 文件应该是什么。 运行 同一台服务器上的两个项目队列会不会有任何问题?

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