ホームページ  >  記事  >  バックエンド開発  >  LaravelでのQueueの使用

LaravelでのQueueの使用

*文
*文オリジナル
2018-05-25 13:48:583654ブラウズ

Laravel Queue Service は、さまざまなバックグラウンド キューに統合された API を提供します。この記事では、Laravel で Queue を使用するための最も基本的な操作チュートリアルを中心に、サンプル コードを通じて詳しく紹介します。お役に立てれば幸いです。

前書き

laravelのキューサービスは他のキューサービスと何ら変わりはなく、人間の思考に最も沿った最も単純で一般的なプロセスです。キュー情報を保存する場所があり、 PHP プロセスが実行中である タスクが書き込まれ、別の PHP デーモンがキュー情報をポーリングし、実行要件を満たすタスクが実行されて削除されます。 PHP は URL 駆動の同期言語であり、本質的にブロックするため、Laravel がキュー情報をクエリして実行するためのデーモン ツールを提供することは驚くことではありません。

ここ 2 日間で Laravel のキューに触れるのは初めてで、かなり時間がかかりました。 。 。苦労したのに、まだ Laravel の使い方がよくわからないと感じています。ドキュメントは比較的シンプルでまとめられており、ソースコードを読むのは少し難しいです (ただし、ソースコードを読んで、ゆっくりデバッグして検証します)。今でも最も信頼できるものです)。

以下は、キューの最も基本的な操作のみを使用する私の簡単なデモです。より高度な操作にはさらに時間がかかります:)

Laravel キューを使い始めるのが難しい私のような学生は、それを共有できます。

構成

Redisパッケージを追加します

composer.jsonのrequireセクションに「predis/predis」: "~1.0"を追加し、composerを起動して更新します。

database.php

database.php設定ファイルにredisデータベース部分を設定します。デフォルトでデフォルトの接続があります。これを使用してください:)

このデフォルトの接続に必要な設定項目に従って編集します。 .env 構成ファイルで、REDIS_HOST、REDIS_PASSWORD、および REDIS_PORT に、独自のサーバーの Redis の対応する値を入力します。

queue.php

まず、.env で QUEUE_DRIVER を構成する必要があります。今は Redis を使用する予定なので、それを Redis に構成します。

次に、queue.php の接続セクションで redis 接続を構成します。ここで、connection の対応する値は、database.php の redis のデフォルト接続です。

タスククラス

次のステップは、実際の操作クラスを記述することです。Laravel は、タスククラスの作成を簡素化するための職人コマンドを提供します。

php artisan make:job Demo

ジョブディレクトリがアプリディレクトリに生成されます。すでに Demo.php Task クラスがあります。

Lumen にはこの職人コマンドはありませんが、デフォルトでは ExampleJob.php がすでに書かれているので、それをコピーして名前を変更するだけです。
まず、ハンドル メソッドで簡単なログ出力テストを作成します。

Log::info('Hello, queue');

タスクの発行

次に、タスクをキューにプッシュするエントリ関数を作成します。補助関数dispatch()を使用します:

Laravelで次のメソッドを使用します:

Demo::dispatch();

Lumenで次のメソッドを使用します:

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

高度な実行: )

キューにプッシュするとき、通常はパラメーターを渡す必要がありますが、ここでどのように渡すのでしょうか?

パラメータの送信

受け渡し


エントランス関数では、パラメータメソッドは次のように渡されます:

は次の方法を使用します:

$param = 'Stephen';
Demo::dispatch($param);

lumenは次の方法を使用します:

$param = 'Stephen';
dispatch(new Demo($param));

受信

タスククラスでパラメータを受け取る方法は以下の通りです:

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 基本クラスが IlluminateFoundationBusDispatchable トレイトを使用せず、IlluminateBusQueueable の onQueue() メソッドを直接使用しているためです。

これで、Job クラスが IlluminateBusQueueable トレイトを使用していることが明らかになったため、Job クラスでこの onQueue() メソッドを呼び出す必要があります。

えー

キューを開くとき:

php artisan queue:work --queue=emails

这里指定的队列名 emails 和 dispatch 时指定的队列名保持一致即可。

相关推荐:

学习Laravel5的Eloquent 关系

laravel5.5控制器传参顺序问题及解决方案

Laravel 5.5的可相应接口如何使用?

以上がLaravelでのQueueの使用の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。