【问题标题】:running laravel queue with multiple database使用多个数据库运行 laravel 队列
【发布时间】:2017-05-10 03:48:35
【问题描述】:

我有 Laravel 5 项目。这是多租户项目,所以我有一个包含多个数据库的文件夹项目。

当我使用php artisan queue:listen 时,它只适用于当前的数据库设置。我使用database 队列驱动程序,因此每个租户都有自己的通知表。如何设置队列侦听器来检查所有数据库作业?

【问题讨论】:

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


    【解决方案1】:

    如果您想继续使用database 驱动程序,我建议您设置另一个数据库,其中包含您所有排队的作业和失败的作业。

    虽然没有在配置中,也没有在文档中提到,但是在查看代码后,看起来您应该可以在队列配置中添加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 表中。
    • 所以当我选择使用redis时,我也需要设置我的队列数据库吗?好的,谢谢@patricus,我会试试的
    • 作业是按照配置创建的,但是当监听器执行时,它总是与默认连接连接,如何为队列监听器配置动态连接?
    猜你喜欢
    • 2017-01-09
    • 1970-01-01
    • 2016-12-30
    • 2017-11-18
    • 2018-08-26
    • 1970-01-01
    • 2013-12-01
    • 2020-03-23
    • 2016-01-20
    相关资源
    最近更新 更多