PHP Academy · レッスン

ジョブのリトライ、遅延、チェーン

試行回数と遅延を設定し、依存するジョブをチェーンでつなぎます

レッスン 3/413 ステップ

「ジョブのリトライ、遅延、チェーン」はCoddyKit上の無料PHP Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPHP Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 PHP Academyコースには全4レッスンが含まれています。

最大試行回数

ジョブをfailed_jobsに移す前に、何回リトライするかを設定します。

<?php
class SendWelcomeEmail implements ShouldQueue
{
    public int $tries = 3; // retry up to 3 times
}

最大例外数

$maxExceptionsを使用すると、例外の回数に基づいてリトライ回数を制限できます。タイムアウトを含むすべての試行回数を数えるattemptsとは異なります。

<?php
public int $maxExceptions = 3;

リトライ間隔

リトライ試行の間隔を秒単位で設定します。

<?php
public int $backoff = 60; // wait 60 seconds before retry

// Or exponential backoff:
public function backoff(): array
{
    return [1, 5, 10]; // 1s, 5s, 10s between attempts
}

ジョブのタイムアウト

最大実行時間を秒単位で設定します。ワーカーがこの時間を超えると、ジョブはキューに戻されます。

<?php
public int $timeout = 120; // 2 minutes max

遅延付きディスパッチ

ディスパッチ呼び出し元でジョブを遅延させます。

<?php
SendReminder::dispatch($user)->delay(now()->addDay());
// Or pass a Carbon instance:
SendReminder::dispatch($user)->delay(Carbon::tomorrow());

fail()とreleased()

handle()内で$this->fail($exception)を呼び出すと、ジョブをすぐに失敗としてマークできます。また、$this->release($delay)を呼び出すと、遅延付きでジョブをキューに戻せます。

<?php
public function handle(): void
{
    try {
        // ...
    } catch (TransientException $e) {
        $this->release(30); // re-queue in 30 seconds
    } catch (FatalException $e) {
        $this->fail($e);   // mark as failed now
    }
}

failed()メソッド

ジョブにfailed()メソッドを定義すると、すべての試行回数を使い切ったときにクリーンアップを実行できます。

<?php
public function failed(\Throwable $exception): void
{
    // Notify team, update DB, etc.
    Log::error("Job failed: ".$exception->getMessage());
}

ジョブチェーン

ジョブをチェーン化すると、前のジョブが成功した後にのみ次のジョブが実行されます。

<?php
Bus::chain([
    new DownloadFile($url),
    new ProcessFile($path),
    new NotifyUser($user),
])->dispatch();

チェーン失敗の捕捉

catch()を使用すると、チェーン全体を停止せずにチェーンの失敗を処理できます。

<?php
Bus::chain([...])
    ->catch(fn (\Throwable $e) => Log::error($e))
    ->dispatch();

Bus::batch()

複数のジョブをバッチとして並列にディスパッチし、すべてが完了したとき、またはいずれかが失敗したときにコールバックを実行します。

<?php
Bus::batch([
    new ImportRow($rows[0]),
    new ImportRow($rows[1]),
])->then(fn ($b) => Log::info("All done"))
  ->catch(fn ($b, $e) => Log::error($e))
  ->dispatch();

キューワーカーのフラグ

リトライ回数やタイムアウトを指定してワーカーを起動します:php artisan queue:work --tries=3 --timeout=90。ジョブレベルの設定は、ワーカーレベルの設定より優先されます。

概要

ジョブに$tries、$backoff、$timeoutを設定します。一時的な失敗にはrelease()、恒久的な失敗にはfail()を使用します。Bus::chain()でジョブを順番にチェーン化します。

クイックチェック

handle()内からジョブを遅延付きでキューに戻すメソッドはどれですか?

無料で開始

AI チューターと学ぶ PHP — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
49
レッスン
195

よくある質問

「ジョブのリトライ、遅延、チェーン」レッスンは無料ですか?

はい。「ジョブのリトライ、遅延、チェーン」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、PHP Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 PHP Academyコースには全4レッスンが含まれています。

「ジョブのリトライ、遅延、チェーン」で何を学びますか?

試行回数と遅延を設定し、依存するジョブをチェーンでつなぎます ブラウザで直接実行するハンズオンコードでPHP Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

PHP Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのPHP Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「ジョブのリトライ、遅延、チェーン」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このPHP Academyレッスンでコードを書いて実行できますか?

はい。すべてのPHP Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. キューの概念とドライバー
  2. ジョブの作成とディスパッチ
  3. ジョブのリトライ、遅延、チェーン
  4. Laravel Horizonでキューを監視する
← PHP Academyに戻る