鍍金池/ 問答/PHP/ 關(guān)于laravel 隊列的一些使用問題

關(guān)于laravel 隊列的一些使用問題

由于業(yè)務(wù)需要,我在一個方法中需要執(zhí)行幾個不同的推送通知,經(jīng)過思考我想通過隊列來執(zhí)行,現(xiàn)在有一些問題需要各位大佬指點:

文檔的寫法:
php artisan queue:work database

1.在運行隊列的時候,work可以理解為線程嘛?可以開啟多個連接嘛?我是說按下面這樣寫,如果不是那能否使用兩個連接呢?如何配置?

 php artisan queue:work  database,databse1

2.隊列之間是并行執(zhí)行的嘛?

圖片描述

3.laravel的異步隊列,是不是可以理解為單獨開了一個線程,將所有隊列都放在這個線程里執(zhí)行,而不是為每個線程單獨創(chuàng)建一個線程?如果我想每個隊列單獨使用一個線程,是不是只能使用swoole服務(wù)?

回答
編輯回答
北城荒

這個答案說可以多進程https://segmentfault.com/q/10...

這篇文章還可以:https://laravel-china.org/art...

2017年9月28日 16:06
編輯回答
怣痛
  • 第一個問題,work可以理解位線程嗎?不可以,這里的php artisan queue:work只是一個進程,隊列中的任務(wù)是按順序執(zhí)行的,同一時間在一個進程中只有一個任務(wù)在處理,只有這個處理完了才會接受下一個任務(wù)來處理。

    因此,為了提高執(zhí)行效率,一般都會啟動多個這樣的work進程來處理,比如使用supervisor對進程進行管理。

    不能在一個php artisan queue:work指定兩個connection來處理,一般來說,如果存在多個不同的connection,那么啟動多個php artisan queu:work database這樣的進程來分別監(jiān)聽不同的connection就可以了。

  • 第二個問題,隊列之間是并行執(zhí)行的嗎?對于單個php artisan queue:work來說,里面的任務(wù)都是串行執(zhí)行的,使用--queue參數(shù)可以指定其監(jiān)聽不同的隊列,因此需要對于每個隊列,創(chuàng)建一個php artisan queue:work --queue queueName的進程分別進行處理,這樣隊列之間就可以并行處理了
  • 第三個問題,Laravel中的異步隊列,不能理解為線程,它們都是進程,推薦使用supervisor對多Laravel隊列進程進行管理。
2018年4月12日 08:32