検索
ホームページバックエンド開発PHPチュートリアルPHPのLaravelフレームワークにおけるメッセージキューと非同期キューの利用方法の解析

この記事では、PHP の Laravel フレームワークでメッセージ キューと非同期キューを使用する方法を主に紹介します。Laravel 5.0 以降のバージョンでは、サンプル環境は Linux システムです。必要な方は参考にしてください。

キュー構成

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

現在のプロジェクトはすべて 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 global require "laravel/installer=~1.1"
vi ~/.bash_profile

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

source ~/.bash_profile

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

laravel -V

次のように表示されれば成功です。

Laravel Installer version 1.2.1

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

laravel new guagua

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

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

php artisan make:controller DefaultController

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

for($i = 0; $i < 100; $i ++) {
  Queue::push(new SendEmail("ssss".$i));
}

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

php artisan make:command SendEmail --queued

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

protected $msg;

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

public function __construct($msg)
{
  $this->msg = $msg;
}

変更されたハンドル メソッド

public function handle() {
  sleep(4);
  echo $this->msg."\t".date("Y-m-d H:i:s")."\n";
  $this->delete();
}

6. ルートを変更します

Route::get(&#39;/&#39;, [
  &#39;as&#39; => &#39;index&#39;,
  &#39;uses&#39; => &#39;DefaultController@index&#39;
]);

7. 監視キュー

php artisan queue:listen

Toマルチタスクを確認するには、3 つのウィンドウを同時に開き、同じコマンドを実行します。

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

php artisan serve --port 8080

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

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


2016321142239283.png (862×658)#この時点で、ほぼ望み通りの効果が得られました。 laravelでは簡単にキューを実装でき、マルチタスクも扱えることが確認できました。

make コマンドで生成されたコードで App\Commands\Command を使用しますが、実行時にそのようなファイルが存在しないというメッセージが表示されます。解決策は、Illuminate\Console\Command を使用するように変更することです。なぜこの低レベルの問題が発生するのか、私の Mac システムに問題があるのか​​、それとも私の性格に問題があるのか​​わかりません。

コントローラーのアクションでキューをプッシュする場合、非同期実行は行われず、アクション スクリプト内で実行されます。これは構成の問題であることが判明しました。構成内の queue.php を変更する必要があるだけでなく、.evn 内の関連する構成も変更する必要があることが判明しました。問題は解決しましたが、まだ金玉に痛みがあり、理解できません。まだlaravelを学ぶ必要があります。


非同期キューの使用方法


1. 構成

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

(1)存储队列的地方
(2)执行任务的服务
打开 config/queue.php ,这是Laravel5关于队列的配置文件。首先我们可以通过 default 参数指定默认队列驱动,默认配置是 sync , 这是同步队列,我们要做异步队列首先就要改变这里。假设我们用 database 作为驱动,队列任务将会存放在数据库中,而我们后面会另外启动一个后台服务来处理队列任务,这就是异步方式了。

&#39;default&#39; => &#39;database&#39;

修改完配置后,我们需要创建一个表来存放队列任务,Laravel5已经在自带artisan命令中内置了一个指令用来生成数据迁移,只需要两条命令即可,当然你得实现配置好数据库连接。

php artisan queue:table
php artisan migrate

这样就自动在数据库中创建了 jobs 表。

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 表中,由队列监听服务处理。

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

如何解决Laravel中log无法写入的问题

关于PHP的autoLoad自动加载机制的分析

以上がPHPのLaravelフレームワークにおけるメッセージキューと非同期キューの利用方法の解析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
セッションを保存するためにデータベースを使用することの利点は何ですか?セッションを保存するためにデータベースを使用することの利点は何ですか?Apr 24, 2025 am 12:16 AM

データベースストレージセッションを使用することの主な利点には、持続性、スケーラビリティ、セキュリティが含まれます。 1。永続性:サーバーが再起動しても、セッションデータは変更されないままになります。 2。スケーラビリティ:分散システムに適用され、セッションデータが複数のサーバー間で同期されるようにします。 3。セキュリティ:データベースは、機密情報を保護するための暗号化されたストレージを提供します。

PHPでカスタムセッション処理をどのように実装しますか?PHPでカスタムセッション処理をどのように実装しますか?Apr 24, 2025 am 12:16 AM

PHPでのカスタムセッション処理の実装は、SessionHandlerInterfaceインターフェイスを実装することで実行できます。具体的な手順には、次のものが含まれます。1)CussentsessionHandlerなどのSessionHandlerInterfaceを実装するクラスの作成。 2)セッションデータのライフサイクルとストレージ方法を定義するためのインターフェイス(オープン、クローズ、読み取り、書き込み、破壊、GCなど)の書き換え方法。 3)PHPスクリプトでカスタムセッションプロセッサを登録し、セッションを開始します。これにより、データをMySQLやRedisなどのメディアに保存して、パフォーマンス、セキュリティ、スケーラビリティを改善できます。

セッションIDとは何ですか?セッションIDとは何ですか?Apr 24, 2025 am 12:13 AM

SessionIDは、ユーザーセッションのステータスを追跡するためにWebアプリケーションで使用されるメカニズムです。 1.ユーザーとサーバー間の複数のインタラクション中にユーザーのID情報を維持するために使用されるランダムに生成された文字列です。 2。サーバーは、ユーザーの複数のリクエストでこれらの要求を識別および関連付けるのに役立つCookieまたはURLパラメーターを介してクライアントに生成および送信します。 3.生成は通常、ランダムアルゴリズムを使用して、一意性と予測不可能性を確保します。 4.実際の開発では、Redisなどのメモリ内データベースを使用してセッションデータを保存してパフォーマンスとセキュリティを改善できます。

ステートレス環境(APIなど)でセッションをどのように処理しますか?ステートレス環境(APIなど)でセッションをどのように処理しますか?Apr 24, 2025 am 12:12 AM

APIなどのステートレス環境でのセッションの管理は、JWTまたはCookieを使用して達成できます。 1。JWTは、無国籍とスケーラビリティに適していますが、ビッグデータに関してはサイズが大きいです。 2.cookiesはより伝統的で実装が簡単ですが、セキュリティを確保するために慎重に構成する必要があります。

セッションに関連するクロスサイトスクリプティング(XSS)攻撃からどのように保護できますか?セッションに関連するクロスサイトスクリプティング(XSS)攻撃からどのように保護できますか?Apr 23, 2025 am 12:16 AM

セッション関連のXSS攻撃からアプリケーションを保護するには、次の測定が必要です。1。セッションCookieを保護するためにHTTPonlyとセキュアフラグを設定します。 2。すべてのユーザー入力のエクスポートコード。 3.コンテンツセキュリティポリシー(CSP)を実装して、スクリプトソースを制限します。これらのポリシーを通じて、セッション関連のXSS攻撃を効果的に保護し、ユーザーデータを確保できます。

PHPセッションのパフォーマンスを最適化するにはどうすればよいですか?PHPセッションのパフォーマンスを最適化するにはどうすればよいですか?Apr 23, 2025 am 12:13 AM

PHPセッションのパフォーマンスを最適化する方法は次のとおりです。1。遅延セッション開始、2。データベースを使用してセッションを保存します。これらの戦略は、高い並行性環境でのアプリケーションの効率を大幅に改善できます。

session.gc_maxlifetime構成設定とは何ですか?session.gc_maxlifetime構成設定とは何ですか?Apr 23, 2025 am 12:10 AM

thesession.gc_maxlifettinginttinginphpdethinesthelifsessessiondata、setinseconds.1)it'sconfiguredinphp.iniorviaini_set()。 2)AbalanceSneededToAvoidPerformanceIssues andunexpectedLogouts.3)php'sgarbagecollectionisisprobabilistic、影響を受けたBygc_probabi

PHPでセッション名をどのように構成しますか?PHPでセッション名をどのように構成しますか?Apr 23, 2025 am 12:08 AM

PHPでは、session_name()関数を使用してセッション名を構成できます。特定の手順は次のとおりです。1。session_name()関数を使用して、session_name( "my_session")などのセッション名を設定します。 2。セッション名を設定した後、session_start()を呼び出してセッションを開始します。セッション名の構成は、複数のアプリケーション間のセッションデータの競合を回避し、セキュリティを強化することができますが、セッション名の一意性、セキュリティ、長さ、設定タイミングに注意してください。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、