运行工匠队列:在动态多租户多数据库系统上工作
Posted
技术标签:
【中文标题】运行工匠队列:在动态多租户多数据库系统上工作【英文标题】:run artisan queue:work on dynamic multitenant multi database system 【发布时间】:2021-11-22 15:52:04 【问题描述】:我正在使用 laravel 8,并在 laravel 中开发了一个多租户应用程序。
我的应用程序为每个用户动态创建了不同的数据库
数据库连接基于子域。
例如,如果子域是foo.example.com
,它连接到数据库foo
我有一个数组中所有子域的列表。
现在我想为每个子域/数据库运行 php artisan queue:work 或执行作业表任务。如果我无法使用工匠命令,我愿意接受任何其他黑客攻击。
【问题讨论】:
【参考方案1】:您可以通过使用不同的connections or queues 来实现此目的。使用不同的队列时,您仍然可以在同一个后端服务上管理所有作业。如果您想使用不同的后端服务(或相同类型的多个后端服务),您可能应该使用多个连接。
使用多个队列
Dispatch 您的工作与->onQueue($currentSubdomain)
。Start 您的队列工作人员与php artisan queue:work --queue=<foo>
,其中<foo>
是您当前的子域。
使用多个连接
Dispatch 您的工作与->onConnection($currentSubdomain)
。Start 您的队列工作人员与php artisan queue:work <connection>
。
注意:使用多个连接需要在您的queue.php
中进行正确配置。最简单的方法是只使用多个队列,因为它们不需要额外的配置。
【讨论】:
以上是关于运行工匠队列:在动态多租户多数据库系统上工作的主要内容,如果未能解决你的问题,请参考以下文章