ホームページ >バックエンド開発 >PHPチュートリアル >LaravelでQueueを使用する最も基本的な操作に関するチュートリアル

LaravelでQueueを使用する最も基本的な操作に関するチュートリアル

jacklove
jackloveオリジナル
2018-07-04 17:52:272511ブラウズ

Laravel キューサービスは、さまざまなバックグラウンドキューに統一された API を提供します. 次の記事では、Laravel で Queue を使用するための最も基本的な操作チュートリアルを中心に紹介します. サンプルコードを使用して詳細に紹介します. 必要な友達は使用できます参考までに、以下を見てみましょう。

まえがき

laravel のキュー サービスは他のキュー サービスと何ら変わりません。プロセス: キュー情報を保存する場所があり、PHP プロセスが実行時にタスクを書き込み、別の PHP デーモン プロセスがキュー情報をポーリングし、実行要件を満たすタスクを実行および削除します。 PHP は URL 駆動の同期言語であり、本質的にブロックするため、Laravel がキュー情報をクエリして実行するためのデーモン ツールを提供することは驚くことではありません。

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

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

私と同じように、始めるためのキューがいくつかあります。 Laravelを使えば、困っている生徒同士でもコミュニケーションをとることができます。

構成

Redis パッケージを追加

composer.json 内"predis/predis": "~1.0" を require セクションに追加し、composer up して更新します。

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 タスク クラスがすでに存在するアプリ ディレクトリに生成されます。

Lumen にはこの職人コマンドはありませんが、これは非常に便利で、デフォルトでは ExampleJob.php がすでに書かれているので、それをコピーして名前を変更するだけです。

最初に、handle メソッドで簡単なログ出力テストを作成します。


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

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 时指定的队列名保持一致即可。

总结

您可能感兴趣的文章:

详解Yaf框架PHPUnit集成测试方法讲解

快速解决PHP调用Word组件DCOM权限的问题讲解

PHP获取数组中指定的一列实例讲解

以上がLaravelでQueueを使用する最も基本的な操作に関するチュートリアルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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