在多个数据库上运行Laravel队列

4
我有一个Laravel 5项目。这是一个多租户项目,因此我有一个包含多个数据库的项目文件夹。
当我使用php artisan queue:listen时,它只能使用当前的数据库设置。我使用了database队列驱动,所以每个租户都有自己的通知表。如何设置队列监听器以检查所有数据库作业?
1个回答

8
如果您想继续使用数据库驱动程序,我建议设置另一个包含所有排队作业和失败作业的数据库。
虽然这不在配置文件或文档中提到,但在查看代码后,似乎您可以将connection参数添加到队列配置中,然后队列将与指定连接的数据库进行交互。
因此,在您的config/database.php中,为您的队列数据库定义一个新的连接。
'connections' => [
    // your existing connections

    'queue' => [
        'driver' => 'mysql',
        'database' => 'your-queue-database',
        // rest of connection information (host, port, etc)
    ],
],

然后,在您的 config/queue.php 中,告诉您的数据库队列使用您的新连接:
'connections' => [
    'database' => [
        'driver' => 'database',
        'connection' => 'queue', // connection name from database config
        'table' => 'jobs',
        'queue' => 'default',
        'retry_after' => 90,
    ],
]

另一种选择是使用其他队列驱动程序。设置Redis、SQS或Beanstalk。

嗨,感谢您的回答。两种方法都可以,但是当我使用redis时,如何查看当前挂起的作业或失败的作业,就像在database中一样。这样我就知道是否有什么问题或某些作业未按预期工作?顺便说一句,我使用laravel forge进行服务器设置。 - martiendt
无论您使用哪种类型的队列,当作业超过队列工作者允许的最大尝试次数时,失败的作业都将报告到数据库中的“failed_jobs”表中。@martiendt - patricus
当我选择使用Redis时,我需要设置我的队列数据库吗?好的,谢谢@patricus,我会尝试的。 - martiendt
作业按照配置创建,但当监听器执行时,它总是连接到默认连接,如何为队列监听器配置动态连接? - Riz
为什么这对我不起作用?在我的情况下,工作者仍然尝试从默认数据库连接获取作业。 - fahad shaikh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接