Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel多个应用程序同一服务器如果名称相同,队列是否冲突?_Php_Laravel_Laravel 5_Supervisord - Fatal编程技术网

Php Laravel多个应用程序同一服务器如果名称相同,队列是否冲突?

Php Laravel多个应用程序同一服务器如果名称相同,队列是否冲突?,php,laravel,laravel-5,supervisord,Php,Laravel,Laravel 5,Supervisord,我们目前正在同一台专用服务器上运行两个laravel应用程序。每个应用程序都利用laravel的队列系统进行后台作业和通知。每个应用程序都使用redis作为驱动程序。既不定义任何特定队列,也不使用默认队列。我们的supervisor.conf如下: [program:site-one-worker] process_name=%(program_name)s_%(process_num)02d command=php /var/www/siteone.com/artisan queue:work

我们目前正在同一台专用服务器上运行两个laravel应用程序。每个应用程序都利用laravel的队列系统进行后台作业和通知。每个应用程序都使用redis作为驱动程序。既不定义任何特定队列,也不使用默认队列。我们的supervisor.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数据库中仅存在的两个电子邮件地址

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


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

在阅读队列时,Laravel只关心类的名称。因此,如果您有两个站点调度job App\Jobs\CoolEmailSender,那么无论哪个应用程序首先获取它,都将处理它,而不管是哪个应用程序调用它

我在这里可以想到两件事:

多个redis实例 或

传递给-队列的唯一队列名称
可能晚了,但是您是否尝试在config/queue.php修改队列配置

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

使用-queue=project1运行queue

我刚刚将APP_ENV和APP_NAME更改为.ENV文件,它对我起了作用

例如:

First.env:APP\u env=local APP\u NAME=localapp Second.env:APP\u env=staging APP\u NAME=stagingapp
你好。你是怎么解决的?在我的例子中,我们在服务器上有相同应用程序的不同环境。因此,即使队列名称也是相同的。如何解决这个问题?我们为每个应用程序使用了不同的队列名称。如果在同一服务器上有同一应用程序的不同环境(假定为prod、test、dev等),则仍然可以使用不同的队列名称。例如:应用程序产品、应用程序测试、应用程序开发、应用程序等。