溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

laravel6中怎么實現(xiàn)隊列與任務(wù)調(diào)度

發(fā)布時間:2021-07-20 10:40:32 來源:億速云 閱讀:147 作者:Leah 欄目:編程語言

本篇文章為大家展示了laravel6中怎么實現(xiàn)隊列與任務(wù)調(diào)度,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

(一)隊列實現(xiàn)

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

  1. 首先,通過執(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ā)。

  2. //任務(wù)指定到對應(yīng)的隊列
    $job = (new TestQueue())->onQueue('隊列名稱');
    //分發(fā)任務(wù)
    dispatch($job);


  3. 實現(xiàn)的隊列的分發(fā)之后,我們通過運行php artisan queue:work隊列處理器,該處理器便會對分發(fā)到隊列里的任務(wù)進行處理,它會一直運行直到它被手動停止或終端關(guān)閉。需要注意的是,由于隊列處理器是作為一個常駐進程并且在內(nèi)存中保存著已經(jīng)啟動的應(yīng)用狀態(tài),當我們修改對應(yīng)的代碼時,我們需要重啟隊列處理器才會載入修改后的代碼邏輯。所以當我們對相應(yīng)的任務(wù)類進行修改時,我們需要重啟以保證正確性。

  4. Supervisor 配置,這里官方文檔講得挺明白的,我就沒必要在復(fù)述一次官方文檔傳送門

(二)任務(wù)調(diào)度

這里我直接引用官方文檔的話語,簡明易懂。

過去,你可能需要在服務(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 方法中進行定義。

  1. 任務(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();


  2. 任務(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ū)
  1. 最后當然是啟動調(diào)度器運行,執(zhí)行* * * * * cd /項目地址 && php artisan schedule:run >> /dev/null 2>&1。

上述內(nèi)容就是laravel6中怎么實現(xiàn)隊列與任務(wù)調(diào)度,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(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)容。

AI