Laravel 5 如何配置 Queue 数据库驱动程序以连接到非默认数据库?

Posted

技术标签:

【中文标题】Laravel 5 如何配置 Queue 数据库驱动程序以连接到非默认数据库?【英文标题】:Laravel 5 How to configure the Queue database driver to connect to a non-default database? 【发布时间】:2016-06-02 20:00:00 【问题描述】:

在 Laravel 5.1 中,我们可以在 config/queue.php 中设置 Queue 连接配置。

QUEUE_DRIVER=database

    'database' => [
        'driver' => 'database',
        'table' => 'jobs',
        'queue' => 'default',
        'expire' => 60,
    ],

但是,它只会使用config/database.php中的默认数据库连接。

如果我有 2 个数据库,本地主机中有 1 个默认数据库 mysql1,远程服务器中有 1 个数据库 mysql2,并且队列 @9​​87654327@ 表在远程数据库 mysql2 中,我该如何配置队列数据库驱动程序使用远程mysql2 数据库?请注意,主 App 使用的是 localhost 中的默认数据库。

【问题讨论】:

【参考方案1】:

您可以使用queue.php 中的'connection' 参数设置正确的数据库连接(来自您在database.php 中定义的连接)。

'database' => [
    'connection' => 'mysql2',
    'driver' => 'database',
    'table' => 'jobs',
    'queue' => 'default',
    'expire' => 60,
], 

我一直在寻找同样的东西,并在源代码中找到了它。

注意:这不仅会从此连接读取作业(运行队列时),还会将它们写入此连接(调度新作业时)。

【讨论】:

【参考方案2】:

这里的最佳答案对我不起作用,并不是说它不是针对与我不同的问题的最佳答案。我的问题是 Laravel 没有缓存我的配置设置。

进入文件 \config\queue.php 并更改默认驱动程序后...

'default' => env('QUEUE_DRIVER', 'database'),

队列仍在同步驱动程序上运行。

然后我检查了文件...

    \bootstrap\cache\config.php

在第 30 行左右,我看到了这个...

 'queue' => 
array (
'default' => 'sync', 

...但是要连接数据库,应该是...

 'queue' => 
array (
'default' => 'database',

这解决了问题...

php artisan config:cache

运行 config:cache 命令将 config.php 文件重写为当前驱动程序设置。

【讨论】:

【参考方案3】:

您可以在模型中设置$connection 变量。请注意,这只会影响 Eloquent 查询,并且不适用于 Fluid Query Builder。

class Jobs extends Eloquent 
    protected $connection = "database2"     

这当然需要您在config/database.php 文件中拥有第二个named 连接,即'database2' => [...]

【讨论】:

如果你引用this section,当我们使用这个方法$this->dispatch($job)时,它会将作业推送到队列中(到默认数据库连接mysql1中的jobs表上)。就我而言,我想将作业推送到jobs 表上,该表位于非默认数据库连接mysql2 中。我的主应用程序在 localhost 中使用 mysql1,但我的 Job Queue 表在远程服务器中的 mysql2 中。

以上是关于Laravel 5 如何配置 Queue 数据库驱动程序以连接到非默认数据库?的主要内容,如果未能解决你的问题,请参考以下文章

laravel5.5队列

Laravel 5 中的配置

如何测试 Laravel 5 作业?

Laravel 运行队列处理器 queue:work 与 queue:listen 区别及 Windows 终端命令问题

Laravel 运行队列处理器 queue:work 与 queue:listen 区别及 Windows 终端命令问题

laravel 配置redis后怎样使用