首頁  >  文章  >  php框架  >  深入講解laravel6中的隊列與任務調度

深入講解laravel6中的隊列與任務調度

藏色散人
藏色散人轉載
2021-07-19 15:13:152352瀏覽

(一)佇列實作

在laravel中,佇列的實作我們只需要透過操作,就能實現,在實現的前提,我們需要進行簡單的配置,對config/queue.php進行修改,具體查看官方文檔,這裡我不進行詳細說明,下面我們直接進入正題。

  1. 首先,透過執行php artisan make:job 任務類別名稱我們可以實作一個佇列任務,執行該指令後,將會在app目錄下產生Jobs目錄並建立一個新的任務類,該任務類會自動繼承Illuminate\Contracts\Queue\ShouldQueue接口,我們的隊列會呼叫該任務類的handle方法,因此我們只需要在handle裡面去實現我們具體的業務邏輯,就可以輕鬆的實作任務類別。而此時,我們這是在對我們任務類別進行處理,那我們該怎麼去分配任務進行處理呢?
    深入講解laravel6中的隊列與任務調度

  2. 在laravel中,任務的分發,也只需要透過簡單的已實現的方法進行任務分配,我們只需要將任務指定對應的佇列進行分發處理,具體的實作方式只需要以下簡單的幾行程式碼,便可以實現任務分發。

    //任务指定到对应的队列
    $job = (new TestQueue())->onQueue('队列名称');
    //分发任务
    dispatch($job);
  3. 實現的佇列的分發之後,我們透過執行php artisan queue:work佇列處理器,該處理器便會對分發到佇列裡的任務進行處理,它會一直運行直到它被手動停止或終端關閉。需要注意的是,由於佇列處理器是作為一個常駐進程並且在記憶體中保存著已經啟動的應用狀態,當我們修改對應的程式碼時,我們需要重新啟動佇列處理器才會載入修改後的程式碼邏輯。所以當我們對對應的任務類別進行修改時,我們需要重新啟動以確保正確性。

  4. Supervisor 配置,這裡官方文檔講得挺明白的,我就沒必要在複述一次官方文件傳送門

(二)任務調度

這裡我直接引用官方文件的話語,簡潔易懂。

過去,你可能需要在伺服器上為每個調度任務去建立 Cron 入口。但這種方式很快就會變得不友好,因為這些任務調度不在原始程式碼中,而且你每次都需要透過 SSH 連結登入伺服器中才能增加 Cron 入口。
Laravel 命令列調度器可讓你在 Laravel 中對命令調度進行清晰流暢的定義。而使用這個任務調度器時,你只需要在你的伺服器上建立單一 Cron 入口。你的任務調度在 app/Console/Kernel.php 的 schedule 方法中進行定義。

  1. 任務排程定義。在laravel官方文件中,我們較常用的是任務Artisan指令調度和佇列調度。

    //artisan命令调度
    $schedule->command('emails:send Taylor --force')->daily();
    //队列调度
    $schedule->job(new Heartbeat)->everyFiveMinutes();
    // 分发任务到「heartbeats」队列...
    $schedule->job(new Heartbeat, 'heartbeats')->everyFiveMinutes();
  2. 任務呼叫頻率,如上步驟的daily()everyFiveMinutes()等,都是對任務的呼叫頻率進行限制,從字面上也不難理解,其實就是設定每分鐘或每天調用一次。具體呼叫如下(湊個長度),具體也可移步官方文件進行檢視。

#->weeklyOn(1 , '8:00');每週一的8 點執行一次任務#->monthly();每月執行一次任務->monthlyOn(4, '15:00');每月4 號的15 點執行一次任務#->quarterly();每季執行一次任務->yearly();每年執行一次任務->timezone('America/New_York');設定時區
方法 描述
#->cron(' * * * * *'); 自訂Cron 計畫執行任務
#->everyMinute(); 每分鐘執行一次任務
->everyFiveMinutes(); #每五分鐘執行一次任務
->everyTenMinutes(); 每十分鐘執行一次任務
->everyFifteenMinutes(); 每十五分鐘執行一次任務
#->everyThirtyMinutes(); 每三十分鐘執行一次任務
->hourly(); 每小時執行一次任務
->hourlyAt(17); 每小時第17 分鐘執行一次任務
->daily(); 每天午夜執行一次任務(譯者註:每天零點)
->dailyAt('13:00' ); 每天13 點執行一次任務
->twiceDaily(1, 13); 每天1 點及13 點各執行一次任務
->weekly();

最後當然是啟動調度器運行,執行* * * * * cd /專案位址&& php artisan schedule:run >> /dev/null 2>&1。 #########(三)總結######其實也沒啥好講的,只是這兩個通常對我們專案來說是至關重要的,官方文件中講得過於繁瑣且沒必要,就簡單講一下常用的方式,laravel已經對這些常用操作進行封裝,減少了很多麻煩,有興趣再去了解其中的實現邏輯,至少先知道怎麼用。 #########相關推薦:###最新的五個Laravel影片教學####################################

以上是深入講解laravel6中的隊列與任務調度的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除