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