关于laravel 队列的一些使用问题

由于业务需要,我在一个方法中需要执行几个不同的推送通知,经过思考我想通过队列来执行,现在有一些问题需要各位大佬指点:

文档的写法:
php artisan queue:work database

1.在运行队列的时候,work可以理解为线程嘛?可以开启多个连接嘛?我是说按下面这样写,如果不是那能否使用两个连接呢?如何配置?

 php artisan queue:work  database,databse1

2.队列之间是并行执行的嘛?

图片描述

3.laravel的异步队列,是不是可以理解为单独开了一个线程,将所有队列都放在这个线程里执行,而不是为每个线程单独创建一个线程?如果我想每个队列单独使用一个线程,是不是只能使用swoole服务?

阅读 5.7k
2 个回答
  • 第一个问题,work可以理解位线程吗?不可以,这里的php artisan queue:work只是一个进程,队列中的任务是按顺序执行的,同一时间在一个进程中只有一个任务在处理,只有这个处理完了才会接受下一个任务来处理。

    因此,为了提高执行效率,一般都会启动多个这样的work进程来处理,比如使用supervisor对进程进行管理。

    不能在一个php artisan queue:work指定两个connection来处理,一般来说,如果存在多个不同的connection,那么启动多个php artisan queu:work database这样的进程来分别监听不同的connection就可以了。

  • 第二个问题,队列之间是并行执行的吗?对于单个php artisan queue:work来说,里面的任务都是串行执行的,使用--queue参数可以指定其监听不同的队列,因此需要对于每个队列,创建一个php artisan queue:work --queue queueName的进程分别进行处理,这样队列之间就可以并行处理了
  • 第三个问题,Laravel中的异步队列,不能理解为线程,它们都是进程,推荐使用supervisor对多Laravel队列进程进行管理。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题