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
,并且队列 @987654327@ 表在远程数据库 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 数据库驱动程序以连接到非默认数据库?的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 运行队列处理器 queue:work 与 queue:listen 区别及 Windows 终端命令问题
Laravel 运行队列处理器 queue:work 与 queue:listen 区别及 Windows 终端命令问题