Laravel Multi Tenancy Queue Worker-在命令行中工作,但不能在Artisan:call中工作

问题描述 投票:0回答:1

我设置了Laravel多租户,因此每个租户都有自己的数据库,其中包含Jobs / Failed Jobs Tables,还有一个默认数据库,其中包含租户列表及其数据库名称。 (当用户注册时,他们将获得自己的数据库)。

我正在尝试创建一种使用queue:worker在每个租户数据库中运行所有作业的方法。目前,我能想到的最好的事情是创建一个调度程序,该调度程序将每分钟检查默认数据库中的所有租户,然后使用该租户数据库名称调度一个作业。然后,该工作被另一个队列工作人员接走,将数据库连接交换到正确的数据库,然后我尝试运行artisan命令:

php artisan queue:work --stop-when-empty --tries=1

当我在控制台中运行此命令时,它可以完美运行,并且可以在所有租户数据库上完成所有工作。

但是,当我在作业中使用Artisan触发以下命令时:

Artisan::call('queue:work', ['--stop-when-empty' => true, '--timeout' => 30, '--tries' => 1]);

作业总是超时,并且不会在租户数据库中处理任何作业。

我动态设置数据库连接的方式如下:

\Config::set('database.connections.tenant.database','tenant_1');
\DB::purge('tenant');
\Config::set('queue.connections.database.connection','tenant');

为何Artisan:call不起作用,但console命令起作用?或者,除了手动运行作业之外,还有没有更好的方法可以在所有数据库上动态运行作业。

php laravel laravel-5 multi-tenant artisan
1个回答
0
投票

已解决。使用exec()打开该租户的运行php artisan queue:worker,并计划一个命令来不断检查processid,无论其是否仍在运行。

© www.soinside.com 2019 - 2024. All rights reserved.