【问题标题】:Laravel Multi Tenancy Queue Worker - Works in Command Line But Not Artisan:callLaravel Multi Tenancy Queue Worker - 在命令行中工作但不是 Artisan:call
【发布时间】:2020-03-14 03:16:31
【问题描述】:

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

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

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

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

但是,当我在 Job 中使用 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 不起作用但控制台命令起作用的原因有什么? 或者有没有更好的方法在所有数据库上动态运行作业,而不是手动运行它们。

【问题讨论】:

    标签: php laravel laravel-5 multi-tenant laravel-artisan


    【解决方案1】:

    修复它。使用 exec() 为该租户打开 run php artisan queue:worker,并安排一个命令来不断检查 processid,它是否仍在运行。

    【讨论】:

      猜你喜欢
      • 2013-06-28
      • 2016-09-07
      • 2021-06-07
      • 1970-01-01
      • 2013-08-19
      • 2017-08-05
      • 1970-01-01
      • 1970-01-01
      • 2022-06-14
      相关资源
      最近更新 更多