ホームページ > PHPフレームワーク > Laravel > Laravel 8キューシステムの新機能と変更点

Laravel 8キューシステムの新機能と変更点

藏色散人
リリース: 2020-09-27 13:42:26
転載
3057 人が閲覧しました

以下は、#Laravel のチュートリアルコラムで、Laravel 8 のキューシステムの新機能や変更点を紹介します。

Laravel 8キューシステムの新機能と変更点

Laravel 8には、クールな新機能とキューシステムへのいくつかの変更が付属しています。この記事では、これらの機能と変更点について説明します。


Change


Backoff

retryAfter() メソッドですretryAfter キューに入れられたジョブ、電子メール、通知、およびリスナーのプロパティの名前が backoff に変更されました。

phpArtisan queue:work コマンドの --delay オプションの名前も --backoff に変更されました。

また、配列を

backoff プロパティに渡して、指数バックオフを実装するようにワーカーに指示できることも知っておく必要があります:

public $backoff = [30, 60];
ログイン後にコピー
または

バックオフ() メソッドは配列を返します:

public function backoff()
{
    return [30, 60]; 
}
ログイン後にコピー
ここでは指数バックオフを使用して、最初の失敗から 30 秒遅れてジョブを再試行し、その後各失敗後に 60 秒遅らせるようにワーカーに指示します。

queue:work コマンドで指数バックオフを使用することもできます。

php artisan queue:Work --backoff=30,60
ログイン後にコピー

Job Expiration

ジョブをキューに入れます。通知とリスナーの

timeoutAt プロパティの名前が retryUntil に変更されました。

$retryUntil を使用して、将来のある時点までジョブの再試行を続けるようにワーカーに指示します。

retryUntil をジョブ クラスのパブリック プロパティとして、または retryUntil メソッドとして追加できます。

public function retryUntil()
{
    return now()->addDay();
}
ログイン後にコピー

新機能

キュー クロージャ

キュー クロージャをディスパッチするときに、

catch() メソッドへの呼び出しをチェーンできるようになりました:

dispatch(function () {
    // Job logic...
})->catch(function (Throwable $e) {
    // Handle Failure...
});
ログイン後にコピー
if ジョブが失敗すると、

catch() メソッドに提供されたクロージャが呼び出されます。

データベースドライバーの信頼性

Laravelは、ジョブがデータベースキュードライバーを使用してキューに解放されたときにトランザクション内で操作を実行するようになりました。これは、新しい公開インスタンスが追加されない限り、ジョブはキューから削除されないことを意味します。これにより、ジョブが失敗する可能性が大幅に減少します。

Redis ドライバーの効率

Redis キュー ドライバーを使用して一連のジョブをバッチ配布する場合、Laravel は単一のコマンドを Redis に送信することによって操作を実行します。以前は、Laravel はジョブごとに 1 つずつ、複数の

rpush コマンドを Redis に送信していました。

ワーカーの正常な終了

Laravel 8 以降、ワーカーは正常に終了し、

App::Tertaining() コールバックによって登録された終了を呼び出します。

ワーカーの自己終了

メモリ リークを避けるために、ワーカーを時々強制終了し、プロセス監視ツールで新しいワーカーを開始させるのが一般的です。 。これは通常、

queue:restart コマンドを実行する CRON ジョブを追加することによって行われます。

Laravel 8 では、特定の数のジョブを処理した後、または特定の秒数実行した後に終了するようにワーカーに指示できます:

php artisan queue:work --max-jobs=1000 --max-time=3600
ログイン後にコピー

名前付きワーカー

ここで、

--name オプションを queue:work コマンドに追加します。

php artisan queue:work --name=notifications
ログイン後にコピー
この機能を追加する主な目的は、ユーザーがカスタマイズできるようにすることです。実行時のワーカー タスクを処理するキューを選択する方法:

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 のタスクのバッチ処理を使用すると、ワーカーによる並列処理のために多くのタスクをディスパッチできます。バッチ内のすべてのタスクが処理された後、またはバッチ タスクが失敗した後でアクションを実行できます。

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 Balance Rate

2 つの新しいものが追加されましたHorizo​​n 構成オプション:

balanceMaxShift および balanceCooldown

 'environments' => [
    'environment' => [
        'supervisor-1' => [
            'balanceMaxShift' => 5,
        ],
    ],
],
ログイン後にコピー

balanceMaxShift Horizo​​n がワーカー プールを拡張するたびに追加または削除するワーカー プロセスの最大数を設定します。 Horizo​​n の以前のバージョンでは、追加または削除されたワーカー プロセスは 1 つだけでしたが、その数を制御できるようになりました。

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 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:learnku.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート