流明队列连接,数据库驱动
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 驱动程序。用于流明框架