流明队列连接,数据库驱动

Posted

技术标签:

【中文标题】流明队列连接,数据库驱动【英文标题】:lumen queue connection, database driver 【发布时间】:2021-10-17 01:06:24 【问题描述】:

我正在努力在 lumen 8 项目中配置队列连接, 我的 database.php 我有 2 个连接,比如说 A 和 B,A 连接到 DB_A,B 连接到 DB_B

我的 database.php 看起来像这样:

// database.php
'connections' => [
    'connection_A' => array(
        'driver' => env('DB_A',''),
        'host' => env('DB_A_HOST',''),
        'port' => env('DB_A_PORT',''),
        'database' => env('DB_A_DATABASE',''),
        'username' => env('DB_A_USERNAME',''),
        'password' => env('DB_A_PASSWORD',''),
        'charset'  => 'utf8',
        'prefix' => '',
        'schema' => 'public',
    ),

    'connection_B' => array(
        'driver' => env('DB_B',''),
        'host' => env('DB_B_HOST',''),
        'port' => env('DB_B_PORT',''),
        'database' => env('DB_B_DATABASE',''),
        'username' => env('DB_B_USERNAME',''),
        'password' => env('DB_B_PASSWORD',''),
        'charset'  => 'utf8',
        'prefix' => '',
        'schema' => env('DB_B_SCHEMA'),
    ),

我使用连接 A 从 DB_A 获取一些数据并使用 DB_B 上的数据库驱动程序运行作业 所以我的表作业,failed_jobs 都在 DB_B 中

我像这样配置了我的 queue.php

// queue.php
'connections' => [
   
    'database' => [
        'driver' => 'database',
        'table' => 'jobs',
        'queue' => 'default',
        'retry_after' => 90,
        'connection' => 'connection_B', // not working => table jobs not found
        'database' => 'connection_B', //  not working => table jobs not found
    ],

],

'failed' => [
    'driver' => 'database',
    'database' => 'connection_B', // works for some reason
    'table' => 'failed_jobs',
],

所以我的问题是如何告诉队列使用什么数据库连接?

我试图在像这样发送作业之前强制连接:

Config::set('database.connections.connection_B.database', env('DB_B_DATABASE'));
Config::set('database.connections.connection_B.schema', env('DB_B_SCHEMA'));
DB::purge('connection_B');
DB::reconnect('connection_B');

我也尝试像这样设置队列连接:

$connection = Queue::connection('connection_B');
$connection->pushOn('my_queue', $job);

我遇到了异常

No connector for []. "exception":"[object] (InvalidArgumentException(code: 0): No connector for [].

我是否遗漏或误解了什么?

ps:在我的 app.php 中,我加载了 queue.php 和 database.php。

$app->configure('app');
$app->configure('database');
$app->configure('queue');

我会这样分配我的工作:

$jobId = Queue::push((new CreatePdfJob($datas)),null,'my-queue');

感谢您的帮助。

【问题讨论】:

您是否迁移了 fot 表创建? 是的,我使用命令 php artisan queue:table 创建迁移并使用 php artisan migrate --database=connection_B 在数据库 B 上运行它 您在数据库中看到了吗?如果不是 - 尝试通过覆盖连接属性在迁移文件中设置连接 是的,我可以看到作业表和 failed_jobs,这些表在它们应该在的位置,而且两个连接都可以正常工作,可以获取/保存数据。我的问题类似于在数组“数据库”中放置什么键来告诉队列使用什么连接?是像redis config这样的“连接”还是像失败的“数据库”一样,还是别的什么? 哦,你必须使用database连接名称,queue.connections中的数组键。或重命名为database_B 【参考方案1】:

我解决了 queue.php 中的问题

'connections' => [
    'database' => [
        'driver' => 'database',
        'table' => 'jobs',
        'queue' => 'default',
        'retry_after' => 90,
        'connection' => 'connection_B', // this works
    ],

我是个白痴,我用 3n 输入了连接,我还清除了缓存和缓存配置,我不知道它是否有帮助。

谢谢。

【讨论】:

以上是关于流明队列连接,数据库驱动的主要内容,如果未能解决你的问题,请参考以下文章

无法解析 [Illuminate\Mail\TransportManager] 的 NULL 驱动程序。用于流明框架

未定义身份验证保护驱动程序 [api]。流明、野狗、JWTAuth

在laravel v4.2中更改数据库队列驱动程序的数据库

RabbitMQ消息队列

laravel 队列使用(发邮件短信等)

如何通过流明中的作曲家安装照明/邮件