【问题标题】:Laravel multiple apps same server do queues conflict if same name?如果同名,Laravel 多个应用程序同一服务器是否会发生队列冲突?
【发布时间】:2018-01-15 04:59:37
【问题描述】:

我们目前在同一台专用服务器上运行两个 laravel 应用程序。每个应用程序都使用 laravel 的队列系统来处理后台作业和通知。每个都使用 redis 作为驱动程序。既不定义任何特定的队列,它们都使用默认值。我们的主管.conf如下:

[program:site-one-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/siteone.com/artisan queue:work --sleep=5 --tries=1
autostart=true
autorestart=true
user=www-data
numprocs=4
redirect_stderr=true
stdout_logfile=/var/www/siteone.com/storage/logs/worker.log

[program:site-two-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/sitetwo.com/artisan queue:work --sleep=5 --tries=1
autostart=true
autorestart=true
user=www-data
numprocs=4
redirect_stderr=true
stdout_logfile=/var/www/sitetwo.com/storage/logs/worker.log

在为第二个站点添加配置之前,一切都按预期工作。添加后,我们进行测试并注意到,当在 sitetwo.com 上调用触发发送到队列的通知的事件时,本应收到通知的电子邮件地址没有,而是将它们发送到两个电子邮件仅存在于 siteone.com 数据库中的地址!

只要上述主管作业中只有一个正在运行,一切似乎都按预期运行。

在使用相同队列名称进行处理的两个不同应用程序之间是否存在某种冲突?我搞砸了主管配置吗?我这里还有什么遗漏的吗?

【问题讨论】:

  • 你好。你是怎么解决这个问题的?就我而言,我们在服务器上有同一个应用程序的不同环境。因此,即使队列名称相同。我该如何解决这个问题?
  • 我们为每个应用程序使用了不同的队列名称。如果您在同一台服务器上有同一个应用程序的不同环境(假设 prod、test、dev 等),您仍然可以使用不同的队列名称。例如:app_prod、app_test、app_dev、app_etc。

标签: php laravel laravel-5 supervisord


【解决方案1】:

类名是 Laravel 在读取队列时所关心的。因此,如果您有 2 个站点分派作业 App\Jobs\CoolEmailSender,那么无论哪个应用程序首先获取它,都会处理它,无论是哪个应用程序调用它。

我能想到两件事:

  1. 多个redis-instances

  1. 传递给--queue的唯一队列名称

【讨论】:

  • 至少对于redis来说它也考虑到了APP_NAME。例如,redis KEY 将是 [APP_NAME]_database_queues:default 或 [APP_NAME]_database_queues:[queue name]
【解决方案2】:

我刚刚将 APP_ENV 和 APP_NAME 更改为 .env 文件,它对我有用。

例如:

  • 第一个 .env:APP_ENV=local APP_NAME = localapp
  • 第二个.env:APP_ENV=staging APP_NAME=stagingapp

【讨论】:

  • 这应该是正确答案
【解决方案3】:

也许迟到了,但您是否尝试在 config/queue.php 中修改队列配置

'redis' => [
    'driver' => 'redis',
    'connection' => 'default',
    'queue' => 'project1', // 'project2'...
    'retry_after' => 90,
    'block_for' => null,
],

使用--queue=project1 运行队列

【讨论】:

    猜你喜欢
    • 2017-06-23
    • 1970-01-01
    • 2022-01-21
    • 2021-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多