ジョブのリトライ、遅延、チェーン
試行回数と遅延を設定し、依存するジョブをチェーンでつなぎます
「ジョブのリトライ、遅延、チェーン」は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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- キューの概念とドライバー
- ジョブの作成とディスパッチ
- ジョブのリトライ、遅延、チェーン
- Laravel Horizonでキューを監視する