【发布时间】: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