Laravelのキュー遅延配布の問題

3518 ワード

Laravelのキュー遅延配布問題、使用中のピット
QUEUE_DRIVER=sync  デフォルトでは、delay遅延キューでは同期は使用できません.そうしないと機能しません.
以下は元の文書です.
配布の遅延
キュー内のタスクの実行を遅らせたい場合は、タスクインスタンスの  delay  方法.たとえば、割り当て後10分以内にタスクを処理できないように指定します.
delay(Carbon::now()->addMinutes(10));
    }
}

Amazon SQSキューサービスは最大15分遅延します.
さぎょうチェーン
ワークチェーンでは、順番に実行するキューのリストを指定できます.1つのタスクが失敗した場合、残りのタスクは実行されません.タスクを配布するときに使用できます  withChain  メソッドを使用して、ワークチェーンを持つキュータスクを実行します.
ProcessPodcast::withChain([
    new OptimizePodcast,
    new ReleasePodcast
])->dispatch();

カスタムキュー&接続
指定したキューへのタスクの配布
タスクを異なるキューにプッシュすることで、キュータスクを分類したり、異なるキューにどれだけのタスクを割り当てるかを制御したりすることができます.これは、キュープロファイルの異なる「connections」にタスクをプッシュするのではなく、接続の異なるキューにタスクをプッシュすることを覚えておいてください.キューを指定するには、タスクインスタンスの  onQueue  方法:
onQueue('processing');
    }
}

指定した接続へのタスクの配布
複数のキュー接続を使用している場合は、指定した接続にタスクをプッシュできます.接続を指定するには、タスクを配布するときに使用できます.  onConnection  方法:
onConnection('sqs');
    }
}

もちろんチェーン呼び出しもできます  onConnection  および  onQueue  メソッドを使用して、タスクの接続とキューを同時に指定します.
ProcessPodcast::dispatch($podcast)
              ->onConnection('sqs')
              ->onQueue('processing');

タスクの最大試行回数/タイムアウト値の指定
最大試行回数
1つのタスクで最大試行回数を指定すると、Artisanコマンドラインから試行できます.  --tries  で設定します.
php artisan queue:work --tries=3

しかし、タスククラスで最大試行回数を定義するなど、より洗練された方法でこの作業を完了することができます.クラスとコマンドラインの両方で最大試行回数が定義されている場合、Laravelはタスククラスの値を優先的に実行します.

タイムアウト
{note}  timeout  PHP 7.1+および  pcntl  PHP拡張を最適化した.
同様に、タスクが実行できる最大秒数は、Artisanコマンドラインの  --timeout  スイッチの指定:
php artisan queue:work --timeout=30

使用中のピット:キュー内のタスクの実行を遅らせたい場合は、タスクインスタンスのdelay方を使用します.
QUEUE_DRIVER=sync  デフォルトでは、delay遅延キューでは同期は使用できません.そうしないと機能しません.私が使用しているredis
 
記事の元のアドレス:https://learnku.com/docs/laravel/5.5/queues/1324#delayed-dispatching