由于业务需要,我在一个方法中需要执行几个不同的推送通知,经过思考我想通过队列来执行,现在有一些问题需要各位大佬指点:文档的写法: php artisan queue:work database在运行队列的时候,work可以理解为线程嘛?可以开启多个连接嘛?我是说按下面这样写,如果不是那能否使用两个连接呢?如何配置? php artisan queue:work database,databse1队列之间是并行执行的嘛?laravel的异步队列,是不是可以理解为单独开了一个线程,将所有队列都放在这个线程里执行,而不是为每个线程单独创建一个线程?如果我想每个队列单独使用一个线程,是不是只能使用swoole服务?
2 回答
幕布斯6054654
TA贡献1876条经验 获得超7个赞
第一个问题,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队列进程进行管理。
- 2 回答
- 0 关注
- 507 浏览
添加回答
举报
0/150
提交
取消