Laravel多个队列连接问题
- laravel版本:8.46.0
- PHP 7.4
现在问题是,我想使用多个队列连接。
目前已有Redis队列连接,所以在.env文件中,设置的是:QUEUE_CONNECTION=redis
现在需要再加一个MySQL队列,也就是同时使用Redis队列和MySQL队列。
//队列类
class Action implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public function __construct()
{
$this->connection = 'database';
}
public function handle()
{
debug_log(__CLASS__,[]);
}
}
//Controller类
public function index(Request $request)
{
$all = $request->all();
foreach ($all as $index => $item) {
Action::dispatch($item['number']);
}
}
在调用了Action::dispatch($item['number'])
之后,只是jobs表写入了数据,但是里面的队列不执行,failed_jobs表也没有数据存在。也就是只是把队列加入到了jobs中,队列没有执行。
在执行这个方法之前,已经启用了php artisan queue:work
,所以先排除没启动work的情况。
经过我摸索后,发现两个问题:
1,去修改.env文件中的QUEUE_CONNECTION
,将QUEUE_CONNECTION=redis
改成QUEUE_CONNECTION=database
,这样之后就没问题,但是这样不符合我的需求。
2,修改artisan命令,将php artisan queue:work
,改成php artisan queue:work database
,但是这样做和在队列类里添加connection
的属性值为database
有什么区别吗?
问题:为什么我添加了connection
的属性为database
不生效?同样的,我在dispatch()
后面添加链式调用方法onConnection('database')
方法也不生效,这是为什么?
我怎样改,在不改动artisan命令的情况下,让它生效?既可以用Redis队列,也可以用MySQL队列?
你先想通队列中的分产和消费两个场景区分开来先,你就能想明白一部分你不理解的问题了
queue:work databasae
开始消费数据库的任务queue:work redis
开始消费redis的任务开两个进程