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

(一)隊列實現

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

  1. 首先,通過執行php artisan make:job 任務類名稱我們可以實現一個隊列任務,執行該命令后,將會在app目錄下生成Jobs目錄并創建一個新的任務類,該任務類會自動繼承IlluminateContractsQueueShouldQueue接口,我們的隊列會調用該任務類的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()等,都是對任務的調用頻率進行限制,從字面意義上也不難理解,其實就是設置每分鐘或每天調用一次。具體調用如下(湊個長度),具體也可移步官方文檔進行查看。

方法 描述
->cron(’* * * * *’); 自定義 Cron 計劃執行任務
->everyMinute(); 每分鐘執行一次任務
->everyFiveMinutes(); 每五分鐘執行一次任務
->everyTenMinutes(); 每十分鐘執行一次任務
->everyFifteenMinutes(); 每十五分鐘執行一次任務
->everyThirtyMinutes(); 每三十分鐘執行一次任務
->hourly(); 每小時執行一次任務
->hourlyAt(17); 每小時第 17 分鐘執行一次任務
->daily(); 每天午夜執行一次任務(譯者注:每天零點)
->dailyAt(‘13:00’); 每天 13 點執行一次任務
->twiceDaily(1, 13); 每天 1 點及 13 點各執行一次任務
->weekly(); 每周執行一次任務
->weeklyOn(1, ‘8:00’); 每周一的 8 點執行一次任務
->monthly(); 每月執行一次任務
->monthlyOn(4, ‘15:00’); 每月 4 號的 15 點 執行一次任務
->quarterly(); 每季度執行一次任務
->yearly(); 每年執行一次任務
->timezone(‘America/New_York’); 設置時區
  1. 最后當然是啟動調度器運行,執行* * * * * cd /項目地址 && php artisan schedule:run >> /dev/NULL 2>&1。

(三)總結

其實也沒啥好講的,只是這兩個通常對我們項目來說是至關重要的,官方文檔中講得過于繁瑣且沒必要,就簡單講一下常用的方式,laravel已經對這些常用操作進行封裝,減少了很多麻煩,有興趣再去了解其中的實現邏輯,至少先知道怎么用。

相關推薦:最新的五個Laravel視頻教程

? 版權聲明
THE END
喜歡就支持一下吧
點贊6 分享