
マイクロサービスを使用して PHP 関数の非同期開発を実装するにはどうすればよいですか?
インターネットの急速な発展に伴い、ビジネス ニーズはますます複雑になり、システム パフォーマンスとユーザー エクスペリエンスに対する要求が高まっています。 PHP 開発では、非同期実装がトレンドになっています。マイクロサービス アーキテクチャは、システムを複数の独立したサービスに分割することでシステムの拡張と保守を容易にする分散システムを構築する方法です。この記事では、マイクロサービスを使用して PHP 関数の非同期開発を実装する方法と、具体的なコード例を紹介します。
- マイクロサービス アーキテクチャの概要
マイクロサービス アーキテクチャは、アプリケーションを複数の小さなサービスに分割するサービス指向のアーキテクチャ スタイルであり、各サービスは独立してデプロイおよび実行できます。各マイクロサービスには独自のデータ ストアがあり、API を介して通信できます。マイクロサービス アーキテクチャの中心的な考え方は、サービスの分割とサービスの通信です。
- 非同期開発の利点
非同期開発では、システムの同時実行パフォーマンスと応答速度を向上させることができます。従来の同期開発モデルでは、各リクエストは次のステップに進む前に、前のリクエストの処理が完了するまで待機する必要があるため、システムの応答が遅くなります。非同期開発モードでは、複数のリクエストを同時に処理できるため、システムの同時処理能力が向上します。さらに、非同期開発ではメッセージ キューを介してタスクの分離も実現でき、システムのスケーラビリティと安定性が向上します。
- メッセージ キューの使用
メッセージ キューは、非同期開発を実現する一般的な方法です。 PHP には、RabbitMQ、Kafka など、選択できるオープン ソースのメッセージ キュー コンポーネントが多数あります。以下では、RabbitMQ を例として、メッセージ キューを使用して非同期開発を実現する方法を紹介します。
まず、RabbitMQ サーバーをインストールし、PHP プロジェクトで RabbitMQ クライアント ライブラリを使用する必要があります。 Composer を使用してプロジェクトの依存関係を管理し、次のコマンドを実行してインストールできます。
1 | composer require php-amqplib/php-amqplib
|
ログイン後にコピー
インストールが完了したら、PHP プロジェクトで RabbitMQ の使用を開始できます。
- プロデューサー パターンとコンシューマー パターン
メッセージ キューを使用して非同期開発を実装する場合、通常はプロデューサー パターンとコンシューマー パターンを使用する必要があります。プロデューサはメッセージ キューにメッセージを送信する責任を負い、コンシューマはメッセージ キューからメッセージを取得して処理します。
まず、プロデューサーを作成し、メッセージをキューに送信します:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <?php
require_once __DIR__. '/vendor/autoload.php' ;
use PhpAmqpLibConnectionAMQPStreamConnection;
use PhpAmqpLibMessageAMQPMessage;
$connection = new AMQPStreamConnection( 'localhost' , 5672, 'guest' , 'guest' );
$channel = $connection ->channel();
$channel ->queue_declare( 'hello' , false, false, false, false);
$message = new AMQPMessage( 'Hello World!' );
$channel ->basic_publish( $message , '' , 'hello' );
echo " [x] Sent 'Hello World!'
";
$channel ->close();
$connection ->close();
|
ログイン後にコピー
次に、コンシューマーを作成し、キューからメッセージを取得して処理します:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <?php
require_once __DIR__. '/vendor/autoload.php' ;
use PhpAmqpLibConnectionAMQPStreamConnection;
$connection = new AMQPStreamConnection( 'localhost' , 5672, 'guest' , 'guest' );
$channel = $connection ->channel();
$channel ->queue_declare( 'hello' , false, false, false, false);
echo " [*] Waiting for messages. To exit press CTRL+C
";
$callback = function ( $message ) {
echo ' [x] Received ' , $message ->body, "
";
};
$channel ->basic_consume( 'hello' , '' , false, true, false, false, $callback );
while ( count ( $channel ->callbacks)) {
$channel ->wait();
}
$channel ->close();
$connection ->close();
|
ログイン後にコピー
上記のコードから、プロデューサーがメッセージをキューに送信し、コンシューマーがコールバック関数を通じてメッセージを取得して処理することがわかります。このようにして、単純なプロデューサーとコンシューマーのモデルを実装します。
- マイクロサービス アーキテクチャとの組み合わせ
実際の開発では、各サービスを独立したマイクロサービスに分割することができ、各マイクロサービスには独自のメッセージ キューがあります。サービスが他のサービスを呼び出す必要がある場合、他のサービスのメッセージ キューにリクエストを直接送信すると、他のサービスはメッセージ キューからリクエストを取得して処理します。
以下では、単純なユーザー サービスと注文サービスを例として、メッセージ キューを使用してマイクロサービス アーキテクチャで非同期開発を実現する方法を示します。
最初に、ユーザーの登録リクエストの処理を担当するユーザー サービスを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <?php
require_once __DIR__. '/vendor/autoload.php' ;
use PhpAmqpLibConnectionAMQPStreamConnection;
use PhpAmqpLibMessageAMQPMessage;
$connection = new AMQPStreamConnection( 'localhost' , 5672, 'guest' , 'guest' );
$channel = $connection ->channel();
$channel ->queue_declare( 'register' , false, false, false, false);
$message = new AMQPMessage(json_encode([ 'username' => 'example' , 'password' => '123456' ]));
$channel ->basic_publish( $message , '' , 'register' );
echo " [x] Sent 'Register Request'
";
$channel ->close();
$connection ->close();
|
ログイン後にコピー
次に、ユーザーの登録リクエストをサブスクライブし、新しいオーダー サービスを生成する注文サービスを作成します。 Order:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | <?php
require_once __DIR__. '/vendor/autoload.php' ;
use PhpAmqpLibConnectionAMQPStreamConnection;
$connection = new AMQPStreamConnection( 'localhost' , 5672, 'guest' , 'guest' );
$channel = $connection ->channel();
$channel ->queue_declare( 'register' , false, false, false, false);
echo " [*] Waiting for register requests. To exit press CTRL+C
";
$callback = function ( $message ) {
$data = json_decode( $message ->body, true);
echo ' [x] Received Register Request: ' , $message ->body, "
";
};
$channel ->basic_consume( 'register' , '' , false, true, false, false, $callback );
while ( count ( $channel ->callbacks)) {
$channel ->wait();
}
$channel ->close();
$connection ->close();
|
ログイン後にコピー
上記のコードを通じて、ユーザー サービスは登録リクエストをメッセージ キューに送信し、オーダー サービスは登録リクエストを受信した後に処理します。このようにして、ユーザー サービスと注文サービスの間の簡単な通信を実装しました。
概要:
マイクロサービス アーキテクチャとメッセージ キューを使用することで、PHP 関数の非同期開発を実現できます。システムを複数のマイクロサービスに分割し、各マイクロサービスは独自のメッセージ キューを持ち、メッセージ キューを通じて通信します。これにより、システムの同時実行パフォーマンスと応答速度が向上し、タスクの分離が達成され、システムの安定性とスケーラビリティが向上します。この記事がマイクロサービスの非同期開発について理解するのに役立つことを願っています。
以上がマイクロサービスを使用して PHP 関数の非同期開発を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。