Laravel キューサービスは、さまざまなバックグラウンドキューに統一された API を提供します. 次の記事では、Laravel で Queue を使用するための最も基本的な操作チュートリアルを中心に紹介します. サンプルコードを使用して詳細に紹介します. 必要な友達は使用できます参考までに、以下を見てみましょう。
まえがき
laravel のキュー サービスは他のキュー サービスと何ら変わりません。プロセス: キュー情報を保存する場所があり、PHP プロセスが実行時にタスクを書き込み、別の PHP デーモン プロセスがキュー情報をポーリングし、実行要件を満たすタスクを実行および削除します。 PHP は URL 駆動の同期言語であり、本質的にブロックするため、Laravel がキュー情報をクエリして実行するためのデーモン ツールを提供することは驚くことではありません。
ここ 2 日間で Laravel のキューに触れるのは初めてでしたが、かなり時間がかかりました。 。 。苦労したのに、まだ Laravel の使い方がよくわからないと感じています。ドキュメントは比較的シンプルでまとめられており、ソースコードを読むのは少し難しいです(ただし、ソースコードを読んで、ゆっくりデバッグと検証を行うとよいでしょう)今でも最も信頼できるものです)。
以下は私の簡単なデモで、キューの最も基本的な操作のみを使用しています。より高度な操作にはさらに時間がかかります:)
私と同じように、始めるためのキューがいくつかあります。 Laravelを使えば、困っている生徒同士でもコミュニケーションをとることができます。
構成
Redis パッケージを追加
database.php
queue.php
タスク クラス
php artisan make:job Demo
ジョブ ディレクトリは、Demo.php タスク クラスがすでに存在するアプリ ディレクトリに生成されます。
Lumen にはこの職人コマンドはありませんが、これは非常に便利で、デフォルトでは ExampleJob.php がすでに書かれているので、それをコピーして名前を変更するだけです。
最初に、handle メソッドで簡単なログ出力テストを作成します。Log::info('Hello, queue');
タスクの発行 #次に、タスクをキューにプッシュするためのエントリ関数を作成します。補助関数dispatch()を使用します:
Demo::dispatch();
dispatch(new Demo);
すべてがうまくいけば、これが最後のステップです。コマンドラインで実行します:
php artisan queue:listen --queue=default
[2017-11-07 02:12:47] Processing: App\Jobs\Demo [2017-11-07 02:12:47] Processed: App\Jobs\Demo
php artisan queue:work --daemon --quiet --queue=default 1>> /dev/null 2>&1
Advanced:)
キューにプッシュするとき、通常はパラメーターを渡す必要がありますが、ここではどのようにパラメーターを渡すのでしょうか?
#パラメータの受け渡し
受け渡し
次のメソッドは Laravel で使用されます:
$param = 'Stephen'; Demo::dispatch($param);
次のメソッドは Lumen で使用されます:
$param = 'Stephen'; dispatch(new Demo($param));
Receive
タスククラスでのパラメータの受け取り方法は以下のとおりです。
protected $param; /** * Create a new job instance. * * @return void */ public function __construct($param) { $this->param = $param; } /** * Execute the job. * * @return void */ public function handle() { Log::info('Hello, ' . $this->param); }
初めての試みですが、遅延配信、エラー処理、優先順位、障害処理など、高度な使い方がたくさんあります。今後も書いていきます:)
複数のキュー
これは考慮する必要がある問題です。すべてのタスクをキューに入れることは不可能です。これはデフォルトと呼ばれ、キューの管理が困難になります。
別のキューを指定するには、非常に簡単です。dispatch() の直後に onQueue() メソッドを実行するだけです。電子メールと呼ばれるこのキューを定義していないようです。もちろん、いくつかの変更を加える必要があります。queue.php 設定ファイルの Redis 設定キューがデフォルトから {default} に変更されます。これにより、キューの名前が、名前ではなくランタイムから動的に取得できるようになります。ハードコーディングされています。
Lumen フレームワークを使用している場合、次のように直接記述するとエラーが発生します: 文字列のメンバー関数 onQueue() を呼び出します。
原因在于 Lumen 的 Job 基类中并没有使用 Illuminate\Foundation\Bus\Dispatchable 这个 trait,而是直接使用 Illuminate\Bus\Queueable 中的 onQueue() 方法。
那么现在就很清楚了,我们的 Job 类使用了 Illuminate\Bus\Queueable 这个 trait,所以需要在 Job 类上调用这个 onQueue() 方法。
$job = new XXXJob(); dispatch($job->onQueue('queue-name'));
当我们在开启队列的时候:
php artisan queue:work --queue=emails
这里指定的队列名 emails 和 dispatch 时指定的队列名保持一致即可。
总结
以上がLaravelでQueueを使用する最も基本的な操作に関するチュートリアルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。