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

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

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

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





  2.  php artisan queue:work  database,databse1
  3. 队列之间是并行执行的嘛?

  4. https://img3.mukewang.com/5b4f2a270001209c04720176.jpg

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


侃侃尔雅
浏览 519回答 2
2回答

幕布斯6054654

第一个问题,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队列进程进行管理。
打开App,查看更多内容
随时随地看视频慕课网APP