运行工匠队列:在动态多租户多数据库系统上工作

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 中进行正确配置。最简单的方法是只使用多个队列,因为它们不需要额外的配置。

【讨论】:

以上是关于运行工匠队列:在动态多租户多数据库系统上工作的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 中的多租户

Grails:运行时改变dataSource url实现多租户数据库分离

多租户SaaS平台的数据库方案

何谓多租户模式 ?

对多租户的理解

SaaS模式应用之多租户系统开发(单数据库多Schema设计)