ホームページ > バックエンド開発 > PHPチュートリアル > PHP の Laravel フレームワークでメッセージ キュー キューと非同期キューを使用する方法、laravelqueue_PHP チュートリアル

PHP の Laravel フレームワークでメッセージ キュー キューと非同期キューを使用する方法、laravelqueue_PHP チュートリアル

WBOY
リリース: 2016-07-12 08:56:10
オリジナル
1329 人が閲覧しました

PHPのLaravelフレームワークlaravelqueueでメッセージキューキューと非同期キューを使用する方法

キュー構成

まず、以前のプロジェクトでキューを使用する方法を説明しましょう。

現在のプロジェクトはすべて symfony を使用し、古いプロジェクトは symfony1.4 を使用し、新しいプロジェクトは symfony2 を使用します。 symfony の全体的な使用感は非常に快適で、特に symfony2 は一般的に Java フレームワークの設計アイデアを多く使用しています。ただし、キューはサポートされていません。 symfony では、キューを使用していくつかのプロセスも実行しました。私は最初に Zhang Yan の httpsqs を使用しました。こちらは使い方はシンプルだけどワンポイント。結局のところ、私たちのプロジェクトはまだ正式に外部にサービスを提供しているため、Apache のオープンソース プロジェクトである ActiveMQ を調査したところ、Apache の下に新しい MQ、それが Apollo があることがわかりました。最終的には Apollo を使用することにしました。

プロジェクトにおけるキューの主なアプリケーション シナリオは、サードパーティ データの同期、サードパーティ データ ユーザーへのデータ変更の同期通知など、時間のかかる機能を非同期で処理することです。私たちの一般的な考え方は、各コントローラーで非同期処理が必要な場合は、json オブジェクトをエンコードして Apollo に詰め込むだけです。別の作業コマンドを作成し、このコマンド内の json オブジェクトを解析し、内部のアクションとパラメーターに基づいてさまざまなメソッドを呼び出します。ビジネス ニーズに応じて、Command をデーモン プロセスとして同時に異なるマシン上で実行することも、非同期マルチタスク アプリケーションを実装するソリューションとして考慮できます。私はlaravelに出会うまでそれを使い続けました。それを研究する計画を立ててください。可能であれば交換することも不可能ではありません。ふふ。

学習を始めたばかりなので、もちろんそのままlaravel5に進みました。ルート、コントローラー、ビューは基本的に symfony と同じなので、始めるのは難しくありません。最後に、キューについて調べます。

1. laravle をインストールし、composer を使用します。これは非常に簡単です。

リーリー

~/.composer/vendor/bin を環境変数に追加します。

リーリー

laravelはコマンドラインから直接使用できます。それを試してみてください。

リーリー

以下が表示されれば成功です。

リーリー

2. プロジェクトを作成します。

リーリー

3. Redis とキューを構成します。

4. コントローラーを作成します

リーリー

コントローラーのアクションで 100 個のキュータスクをプッシュします。

リーリー

5. キューを作成するコマンド

リーリー

app/Commands/SendEmail.php を変更し、プライベート変数を追加します。

リーリー

コンストラクターも変更します。

リーリー

ハンドルメソッドの修正

リーリー

6. ルートを変更する

リーリー

7. キューを監視する

リーリー

マルチタスクを検証するために、3 つのウィンドウを同時に開き、同じコマンドを実行しました。

8.laravelの組み込みサーバーを使用してサービスを開始します

リーリー

ブラウザを開いて http://localhost:8080/ ページにアクセスします。もちろんnginxやApacheなども使えます。ただし、さまざまな設定が必要であり、組み込みのものが使いやすいです。

以下に示すように、コンソールで各キューの実行ステータスを確認できます。 100 個のタスクが 3 つのジョブに均等に分割されていることがわかります。

2016321142239283.png (862×658)

この時点で、私は基本的に望んでいた効果を達成しました。 laravelでは簡単にキューを実装でき、マルチタスクも扱えることが確認できました。

use AppCommandsCommand は make コマンドによって生成されたコードで使用されますが、実行時にそのようなファイルが存在しないことを示すメッセージが表示されます。 解決策は、IlluminateConsoleCommand を使用するように変更することです。なぜこの低レベルの問題が発生するのかわかりません。私の Mac システムの問題ですか、それとも私の性格の問題ですか?
コントローラーのアクションでキューをプッシュする場合、非同期実行は行われず、アクションのスクリプト内で実行されます。 これは構成の問題であることが判明しました。構成内の queue.php を変更する必要があるだけでなく、.evn 内の関連する構成も変更する必要があることが判明しました。 問題は解決しましたが、まだ金玉に痛みがあり、理解できません。まだlaravelを学ぶ必要があります。

非同期キューの使い方

1. 構成

キューの定義については、ここでは紹介しません。非同期キューを使用するには 2 つの鍵があります:

(1) キューを保存する場所
(2) タスクを実行するサービス
Laravel5のキュー設定ファイルであるconfig/queue.phpを開きます。まず、デフォルトのパラメータを使用してデフォルトのキュー ドライバを指定できます。デフォルトの設定は同期キューです。非同期キューを作成するには、まずこれを変更する必要があります。ドライバーとしてデータベースを使用すると仮定すると、キュー タスクはデータベースに保存され、後でキュー タスクを処理するために別のバックグラウンド サービスを開始します。これは非同期メソッドです。

リーリー

設定を変更した後、Laravel5 にはデータ移行を生成するための命令が組み込まれています。もちろん、データベース接続を設定する必要があります。 。

リーリー

これにより、データベースにジョブ テーブルが自動的に作成されます。

2. キューリスニングサービスを開始します

通过下面这条指令启动队列监听服务,它会自动处理 jobs 表中的队列任务:

php artisan queue:listen
ログイン後にコピー

在linux中,如果想让它在后台执行,可以这样:

nohup php artisan queue:listen &
ログイン後にコピー

3.添加队列任务

关于队列任务的添加,手册里说的比较详细,这里就简单举个例子吧。

首先,通过artisan创建一个队列命令:

php artisan make:command SendEmail --queued
ログイン後にコピー

这样会生成 app/Commands/SendEmail.php 这个类文件,这个类会被标识为队列命令,你可以在 handle 方法中写自己的业务逻辑。

在控制器中,可以简单通过 Bus::dispatch 分发任务:

Bus::dispatch(new \App\Commands\SendEmail());
ログイン後にコピー

你会发现任务不会立即执行,而是被放到 jobs 表中,由队列监听服务处理。

更详细的用法建议参考 command bus 和 queue 相关的手册章节。

您可能感兴趣的文章:

  • 深入解析PHP的Laravel框架中的event事件操作
  • PHP的Laravel框架结合MySQL与Redis数据库的使用部署
  • 详解PHP的Laravel框架中Eloquent对象关系映射使用
  • PHP框架Laravel学习心得体会
  • 全面解读PHP的人气开发框架Laravel
  • Nginx中运行PHP框架Laravel的配置文件分享
  • PHP IDE PHPStorm配置支持友好Laravel代码提示方法
  • 使用 PHPStorm 开发 Laravel
  • PHP开发框架laravel安装与配置教程
  • PHP框架Laravel的小技巧两则
  • PHP的Laravel框架中使用AdminLTE模板来编写网站后台

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1113734.htmlTechArticlePHP的Laravel框架中使用消息队列queue及异步队列的方法,laravelqueue queue配置 首先说明一下我之前的项目中如何使用queue的。 我们现在的项目都...
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート