运行 两个 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_CONNECTION
。 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,
]
您好下面是一个项目的主管的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_CONNECTION
。 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,
]