以下は、#Laravel のチュートリアルコラムで、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]; }
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... });
catch() メソッドに提供されたクロージャが呼び出されます。
データベースドライバーの信頼性
Laravelは、ジョブがデータベースキュードライバーを使用してキューに解放されたときにトランザクション内で操作を実行するようになりました。これは、新しい公開インスタンスが追加されない限り、ジョブはキューから削除されないことを意味します。これにより、ジョブが失敗する可能性が大幅に減少します。Redis ドライバーの効率
Redis キュー ドライバーを使用して一連のジョブをバッチ配布する場合、Laravel は単一のコマンドを Redis に送信することによって操作を実行します。以前は、Laravel はジョブごとに 1 つずつ、複数のrpush コマンドを Redis に送信していました。
ワーカーの正常な終了
Laravel 8 以降、ワーカーは正常に終了し、App::Tertaining() コールバックによって登録された終了を呼び出します。
ワーカーの自己終了
メモリ リークを避けるために、ワーカーを時々強制終了し、プロセス監視ツールで新しいワーカーを開始させるのが一般的です。 。これは通常、queue:restart コマンドを実行する CRON ジョブを追加することによって行われます。
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();
Horizon Balance Rate
2 つの新しいものが追加されましたHorizon 構成オプション:balanceMaxShift および
balanceCooldown。
'environments' => [ 'environment' => [ 'supervisor-1' => [ 'balanceMaxShift' => 5, ], ], ],
balanceMaxShift Horizon がワーカー プールを拡張するたびに追加または削除するワーカー プロセスの最大数を設定します。 Horizon の以前のバージョンでは、追加または削除されたワーカー プロセスは 1 つだけでしたが、その数を制御できるようになりました。
balanceCooldown に関しては、各スケーリング操作の間に待機する秒数を設定します。 Horizon の以前のバージョンでは、これは 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 サイトの他の関連記事を参照してください。