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队列?

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 2

你先想通队列中的分产和消费两个场景区分开来先,你就能想明白一部分你不理解的问题了

11个月前 评论

queue:work databasae开始消费数据库的任务

queue:work redis 开始消费redis的任务

开两个进程

11个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!