您好,登錄后才能下訂單哦!
本篇文章為大家展示了laravel6中怎么實現隊列與任務調度,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
在laravel中,隊列的實現我們只需要通過操作,就能實現,在實現的前提,我們需要進行簡單的配置,對config/queue.php
進行修改,具體查看官方文檔,這里我不進行詳細說明,下面我們直接進入正題。
首先,通過執行php artisan make:job 任務類名稱
我們可以實現一個隊列任務,執行該命令后,將會在app目錄下生成Jobs目錄并創建一個新的任務類,該任務類會自動繼承Illuminate\Contracts\Queue\ShouldQueue
接口,我們的隊列會調用該任務類的handle方法,因此我們只需要在handle里面去實現我們具體的業務邏輯,就可以輕松的實現任務類。而此時,我們這是對我們任務類進行處理,那我們該怎么去分配任務進行處理呢?
在laravel中,任務的分發,也只需要通過簡單的已實現的方法進行任務分配,我們只需要將任務指定對應的隊列進行分發處理,具體的實現方式只需要以下簡單的幾行代碼,便可以實現任務分發。
//任務指定到對應的隊列 $job = (new TestQueue())->onQueue('隊列名稱'); //分發任務 dispatch($job);
實現的隊列的分發之后,我們通過運行php artisan queue:work
隊列處理器,該處理器便會對分發到隊列里的任務進行處理,它會一直運行直到它被手動停止或終端關閉。需要注意的是,由于隊列處理器是作為一個常駐進程并且在內存中保存著已經啟動的應用狀態,當我們修改對應的代碼時,我們需要重啟隊列處理器才會載入修改后的代碼邏輯。所以當我們對相應的任務類進行修改時,我們需要重啟以保證正確性。
Supervisor 配置,這里官方文檔講得挺明白的,我就沒必要在復述一次官方文檔傳送門
這里我直接引用官方文檔的話語,簡明易懂。
過去,你可能需要在服務器上為每一個調度任務去創建 Cron 入口。但是這種方式很快會變得不友好,因為這些任務調度不在源代碼中,并且你每次都需要通過 SSH 鏈接登錄到服務器中才能增加 Cron 入口。
Laravel 命令行調度器允許你在 Laravel 中對命令調度進行清晰流暢的定義。且使用這個任務調度器時,你只需要在你的服務器上創建單個 Cron 入口。你的任務調度在 app/Console/Kernel.php 的 schedule 方法中進行定義。
任務調度定義。在laravel官方文檔中,我們更常用的是任務Artisan命令調度和隊列調度。
//artisan命令調度 $schedule->command('emails:send Taylor --force')->daily(); //隊列調度 $schedule->job(new Heartbeat)->everyFiveMinutes(); // 分發任務到「heartbeats」隊列... $schedule->job(new Heartbeat, 'heartbeats')->everyFiveMinutes();
任務調用頻率,如上步驟的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’); | 設置時區 |
最后當然是啟動調度器運行,執行* * * * * cd /項目地址 && php artisan schedule:run >> /dev/null 2>&1
。
上述內容就是laravel6中怎么實現隊列與任務調度,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。