5

Laravel アプリのコントローラーから Artisan コマンドを実行しています。ドキュメントで指定されているように、次のようにキューに入れることができます。

Artisan::queue('email:send', [
    'user' => 1, '--queue' => 'default'
]);

これにより、キュー ロジックが処理され、私の場合はジョブが Redis に送信され、そこですぐに処理されます。

仕事を遅らせたい。次のようにキューコマンドを呼び出すときに、通常これを行うことができます。

$job = (new SendReminderEmail($user))->delay(60);

$this->dispatch($job);

Artisan コマンドを 5 分間遅らせることができるように、これらの機能に参加する方法はありますか? それを遅らせる簡単なオプションがあると思いました。

そうでない場合は、コントローラーと Artisan コマンドの間に別の Job クラスを作成し、通常の方法でキューに入れ、遅延させてから、その Job クラスに Artisan コマンドを呼び出させることができます。しかし、これはそれを機能させるための非常に複雑な方法のようです。キューに入れられた Artisan コマンドを遅らせる良い方法はありますか?

ありがとうございました

4

2 に答える 2

1

コンソールカーネルは「プッシュ」を使用してコマンドをキューに入れるため、これは laravel 5.3 以前では不可能です。

ただし、フレームワークにプル リクエストを送信して、カーネルに「後で」呼び出しを実装することもできます。この呼び出しは、キューの「後で」関数に渡されるだけです。

または、すでに述べたように、ジョブクラスを実装するだけです。

しかし、あなたのユースケースにはもっと良い解決策があります。Mail ファサードを使用するだけです。

Mail::later(5, 'emails.welcome', $data, function ($message) {
    //
});

ドキュメントについては、 https://laravel.com/docs/5.2/mail#queueing-mailを参照してください。

于 2016-08-26T11:44:46.513 に答える