Laravel的隊(duì)列系統(tǒng)默認(rèn)是串行處理作業(yè)的,這意味著每個(gè)作業(yè)都要等待前一個(gè)作業(yè)處理完畢后才能開始處理。但是,有時(shí)候我們需要同時(shí)處理多個(gè)作業(yè),這就需要并發(fā)處理。
Laravel通過將隊(duì)列連接設(shè)置為"redis","database"或"beanstalkd"來實(shí)現(xiàn)并發(fā)處理。這些連接可以處理多個(gè)并發(fā)作業(yè)。
Laravel隊(duì)列系統(tǒng)還支持作業(yè)優(yōu)先級,這意味著我們可以為不同類型的作業(yè)分配不同的優(yōu)先級。優(yōu)先級高的作業(yè)將在優(yōu)先級低的作業(yè)之前處理。優(yōu)先級默認(rèn)為0,值越高表示優(yōu)先級越高。
(相關(guān)資料圖)
我們可以使用--queue選項(xiàng)在調(diào)度作業(yè)時(shí)指定作業(yè)隊(duì)列。例如,我們可以使用以下代碼將作業(yè)推送到"high"隊(duì)列:
ProcessPodcast::dispatch($podcast)->onQueue("high");然后,我們可以使用以下命令啟動(dòng)一個(gè)專用的隊(duì)列進(jìn)程來處理高優(yōu)先級隊(duì)列:
php artisan queue:work --queue=high如果一個(gè)作業(yè)執(zhí)行時(shí)間過長,可能會導(dǎo)致隊(duì)列堵塞,這就需要設(shè)置作業(yè)的超時(shí)時(shí)間。Laravel默認(rèn)的作業(yè)超時(shí)時(shí)間為60秒。
我們可以在定義作業(yè)類時(shí)使用--timeout選項(xiàng)來設(shè)置超時(shí)時(shí)間。例如,以下代碼設(shè)置超時(shí)時(shí)間為120秒:
php artisan make:job ProcessPodcast --timeout=120如果作業(yè)在超時(shí)時(shí)間內(nèi)沒有處理完成,Laravel將嘗試終止該作業(yè)并將其標(biāo)記為失敗。
Laravel隊(duì)列系統(tǒng)默認(rèn)會自動(dòng)重試作業(yè),如果一個(gè)作業(yè)失敗了,它將被重新推送到隊(duì)列中,直到達(dá)到最大嘗試次數(shù)。最大嘗試次數(shù)默認(rèn)為3,可以在config/queue.php中進(jìn)行配置。
如果要禁用作業(yè)重試,我們可以在定義作業(yè)類時(shí)使用--tries選項(xiàng)將最大嘗試次數(shù)設(shè)置為0:
php artisan make:job ProcessPodcast --tries=0如果一個(gè)作業(yè)達(dá)到最大嘗試次數(shù)仍然失敗,它將被標(biāo)記為失敗。Laravel默認(rèn)會將失敗的作業(yè)寫入日志文件。我們還可以在config/queue.php中配置將失敗的作業(yè)發(fā)送到其他通知渠道,例如電子郵件或Slack。
當(dāng)然,我們還可以通過手動(dòng)調(diào)用fail方法來標(biāo)記一個(gè)作業(yè)為失?。?/p>
/** * Execute the job. * * @return void */public function handle(){ if ($this->somethingWentWrong()) { $this->fail(new Exception("Something went wrong.")); } // Process the podcast...} 關(guān)鍵詞:
營業(yè)執(zhí)照公示信息 聯(lián)系我們:55 16 53 8 @qq.com 財(cái)金網(wǎng) 版權(quán)所有 cfenews.com