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

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 2

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

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

开两个进程

11个月前 评论

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

11个月前 评论

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