搜尋
首頁php框架LaravelLaravel 8 隊列系統的新功能與變化

以下由Laravel教學專欄為大家介紹Laravel 8 佇列系統的新功能和變化,希望對需要的朋友有幫助!

Laravel 8 隊列系統的新功能與變化

Laravel 8 中搭配了酷炫的新特性,並對佇列系統的某些變更。在本文中,我們將研究這些特性和變更。

變化


Backoff (回退)

已將retryAfter() 方法和retryAfter 排隊作業,郵件,通知和偵聽器的屬性重新命名為backoff

php artisan queue:work 指令的 --delay 選項也已重新命名為 --backoff

您也應該知道,現在可以將陣列傳遞給backoff 屬性,以指示worker 實作指數回退(exponential backoff):

public $backoff = [30, 60];

或從 backoff() 方法傳回一個陣列:

public function backoff()
{
    return [30, 60]; 
}

在這裡使用指數回退,我們指示worker 在第一次失敗後延遲30 秒重試作業,然後在每次失敗後延遲60 秒。

您也可以在queue:work 指令上使用指數回退:

php artisan queue:Work --backoff=30,60

作業過期

排隊作業,通知和偵聽器的timeoutAt 屬性已重新命名為retryUntil

使用 $retryUntil 指示 worker 繼續重試作業,直到將來的某個時間。

您可以將retryUntil 作為作業類別的公共屬性或retryUntil 方法新增:

public function retryUntil()
{
    return now()->addDay();
}

新功能

#佇列閉包

您現在可以在調度佇列閉包時鍊式呼叫catch() 方法:

dispatch(function () {
    // Job logic...
})->catch(function (Throwable $e) {
    // Handle Failure...
});

如果作業失敗,將呼叫提供給catch() 方法的閉包。

資料庫驅動程式可靠性

當使用資料庫佇列驅動程式將作業釋放回佇列時,Laravel 現在將在交易內執行操作。這意味著除非新增了新的已發佈實例,否則不會從佇列中刪除作業。這大大減少了作業失敗的機會。

Redis 驅動程式效率

當使用 Redis 佇列驅動程式批次分發一組作業時, Laravel 將透過向 Redis 發送單一指令來執行操作。以前, Laravel曾經向 Redis 發送多個 rpush 指令,每個作業一個。

Worker 優雅終止

從Laravel 8 開始, Workers 將優雅退出,並呼叫由App::Terminating() 註冊的任何終止回調。

Worker 自我終止

為了避免記憶體洩漏,通常的做法是不時終止您的工作程序,然後讓您的過程監視工具啟動新的工作程序。通常是透過新增一個執行 queue:restart 令的CRON作業來完成的。

在Laravel 8中,您可以指示Workers 在處理了一定數量的作業或運行了特定的秒數後退出:

php artisan queue:work --max-jobs=1000 --max-time=3600

命名Workers

#你現在加入 --name 選項到 queue:work 指令:

php artisan queue:work --name=notifications

新增此功能的主要目的是允許人們自訂Workers 在執行時如何選擇哪個佇列來處理任務:

Worker::popUsing('notifications', function ($pop) {
    $queues = time()->atNight() 
        ? ['mail', 'webhooks'] 
        : ['push-notifications', 'sms', 'mail', 'webhooks'];

    foreach ($queues as $queue) {
        if (! is_null($job = $pop($queue))) {
            return $job;
        }
    }
});

任務批次

Laravel 的任務批次可讓您分派許多任務,以供您的Workers 並行處理。您可以在批次中的所有任務都處理完畢或任何批次任務失敗後執行操作:

Bus::batch([
    new ProcessFile(1),
    new ProcessFile(2),
    new ProcessFile(3),
])->dispatch();

您可以在官方文件中找到有關「作業批次」的更多資訊。

作業鏈

您現在可以使用Bus 直接排程一系列作業:

Bus::chain([
    new ExtractReports,
    new GenerateReport,
    new SendResults,
])->dispatch();

您也可以新增一個catch() 回調,如果鏈中的任何作業失敗都會被呼叫:

Bus::chain([
    new ExtractReports,
    new GenerateReport,
    new SendResults,
])->catch(function(){
    // Handle the chain failure.
})
->dispatch();

Horizo​​​​n 平衡率

Horizo​​​​n 中新增了兩個新的設定選項: balanceMaxShift and balanceCooldown

 'environments' => [
    'environment' => [
        'supervisor-1' => [
            'balanceMaxShift' => 5,
        ],
    ],
],

balanceMaxShift 設定每次 Horizo​​​​n 擴充功能集區時要新增或刪除的最大工作進程數。在 Horizo​​​​n 的早期版本中,僅新增或刪除了一個工作進程,現在您可以控制該數目。

至於 balanceCooldown ,它設定每個縮放操作之間等待的秒數。在 Horizo​​​​n 的早期版本中,這被硬編碼為3秒。

 'environments' => [
    'environment' => [
        'supervisor-1' => [
            'balanceCooldown' => 1,
        ],
    ],
],

原文地址:https://dev.to/themsaid/features-and-changes-coming-to-laravel-8-s-queue-system-5amg

译文地址:https://learnku.com/laravel/t/50086

以上是Laravel 8 隊列系統的新功能與變化的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:learnku。如有侵權,請聯絡admin@php.cn刪除
Laravel的多功能性:從簡單站點到復雜系統Laravel的多功能性:從簡單站點到復雜系統Apr 13, 2025 am 12:13 AM

選擇Laravel開發項目是因為其靈活性和強大功能適應不同規模和復雜度的需求。 Laravel提供路由系統、EloquentORM、Artisan命令行等功能,支持從簡單博客到復雜企業級系統的開發。

Laravel(PHP)與Python:開發環境和生態系統Laravel(PHP)與Python:開發環境和生態系統Apr 12, 2025 am 12:10 AM

Laravel和Python在開發環境和生態系統上的對比如下:1.Laravel的開發環境簡單,僅需PHP和Composer,提供了豐富的擴展包如LaravelForge,但擴展包維護可能不及時。 2.Python的開發環境也簡單,僅需Python和pip,生態系統龐大,涵蓋多個領域,但版本和依賴管理可能複雜。

Laravel和後端:為Web應用程序提供動力邏輯Laravel和後端:為Web應用程序提供動力邏輯Apr 11, 2025 am 11:29 AM

Laravel是如何在後端邏輯中發揮作用的?它通過路由系統、EloquentORM、認證與授權、事件與監聽器以及性能優化來簡化和增強後端開發。 1.路由系統允許定義URL結構和請求處理邏輯。 2.EloquentORM簡化數據庫交互。 3.認證與授權系統便於用戶管理。 4.事件與監聽器實現松耦合代碼結構。 5.性能優化通過緩存和隊列提高應用效率。

為什麼Laravel如此受歡迎?為什麼Laravel如此受歡迎?Apr 02, 2025 pm 02:16 PM

Laravel受歡迎的原因包括其簡化開發過程、提供愉快的開發環境和豐富的功能。 1)它吸收了RubyonRails的設計理念,結合PHP的靈活性。 2)提供瞭如EloquentORM、Blade模板引擎等工具,提高開發效率。 3)其MVC架構和依賴注入機制使代碼更加模塊化和可測試。 4)提供了強大的調試工具和性能優化方法,如緩存系統和最佳實踐。

django或laravel哪個更好?django或laravel哪個更好?Mar 28, 2025 am 10:41 AM

Django和Laravel都是全棧框架,Django適合Python開發者和復雜業務邏輯,Laravel適合PHP開發者和優雅語法。 1.Django基於Python,遵循“電池齊全”哲學,適合快速開發和高並發。 2.Laravel基於PHP,強調開發者體驗,適合小型到中型項目。

哪個是更好的PHP或Laravel?哪個是更好的PHP或Laravel?Mar 27, 2025 pm 05:31 PM

PHP和Laravel不是直接可比的,因為Laravel是基於PHP的框架。 1.PHP適合小型項目或快速原型開發,因其簡單直接。 2.Laravel適合大型項目或高效開發,因其提供豐富功能和工具,但學習曲線較陡,性能可能不如純PHP。

Laravel是前端還是後端?Laravel是前端還是後端?Mar 27, 2025 pm 05:31 PM

laravelisabackendframeworkbuiltonphp,設計ForweBapplicationDevelopment.itfocusessonserver-sideLogic,databasemagemention和Applicationstructure和CanBeintegratedWithFrontendTechnologiesLikeLikeVue.jsorreActeReacterVue.jsorreActforforfull-stackDevefloct。

如何在Laravel中創建和使用自定義刀片指令?如何在Laravel中創建和使用自定義刀片指令?Mar 17, 2025 pm 02:50 PM

本文討論了Laravel中的創建和使用自定義刀片指令以增強模板。它涵蓋了定義指令,在模板中使用它們,並在大型項目中管理它們,強調了改進的代碼可重複性和R等好處

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境