PHP マイクロサービスを使用して分散メッセージ通信とプッシュを実装する方法
インターネットの発展に伴い、分散アーキテクチャは現代のソフトウェア開発における重要なトレンドになりました。分散アーキテクチャでは、マイクロサービスは、大規模なアプリケーションを複数の小さな自律的なサービス ユニットに分割する一般的なアーキテクチャ パターンです。コラボレーションと対話は、これらのマイクロサービス間のメッセージ通信を通じて実現されます。
この記事では、PHP マイクロサービスを使用して分散メッセージ通信とプッシュを実装する方法を紹介し、具体的なコード例を示します。
まず、新しい PHP プロジェクトを作成します。私たちのプロジェクトが「メッセージサービス」と呼ばれるものだとしましょう。コマンド ラインで次のコマンドを実行します。
mkdir message-service cd message-service composer init
コマンド ライン プロンプトに従ってプロジェクト情報を入力し、生成された composer.json
に次の内容を追加します。
{ "require": { "enqueue/enqueue": "^0.9.18", "enqueue/elasticsearch": "^0.9.7", "enqueue/mongodb": "^0.9.16", "enqueue/redis": "^0.9.19", "enqueue/stomp": "^0.9.16", "enqueue/zmq": "^0.9.13", "enqueue/gearman": "^0.9.11" }, "autoload": { "psr-4": { "MessageService\": "src/" } } }
次に実行します。 次のコマンドを実行すると、必要な依存ライブラリがインストールされます。
composer install
分散システムでは、メッセージ ミドルウェアが重要な役割を果たし、責任を負います。メッセージングとマイクロサービス間の通信を処理します。 RabbitMQ、Kafka などのさまざまなメッセージ ミドルウェアを選択できます。ここでは、RabbitMQ を例として取り上げます。
message-service
のルート ディレクトリに config
という名前のディレクトリを作成し、このディレクトリに rabbitmq.php
ファイルを作成します。ファイルに次のコードを追加します。
<?php return [ 'connections' => [ 'default' => [ 'host' => 'localhost', 'port' => 5672, 'user' => 'guest', 'pass' => 'guest', 'vhost' => '/', ], ], ];
次のコードを含む Producer.php
という名前のファイルを作成します。 ##
<?php namespace MessageService; use EnqueueAmqpLibAmqpConnectionFactory; use EnqueueMessagesValidatorTrait; use InteropAmqpAmqpContext; use InteropAmqpAmqpMessage; class Producer { use MessagesValidatorTrait; private $context; public function __construct() { $config = include 'config/rabbitmq.php'; $connectionFactory = new AmqpConnectionFactory($config['connections']['default']); $this->context = $connectionFactory->createContext(); } public function publish(string $message): void { $this->assertMessageValid($message); $message = $this->context->createMessage($message); $this->context->createProducer()->send($message); echo 'Message published: ' . $message->getBody() . PHP_EOL; } }
Consumer.php という名前のファイルを作成します:
<?php namespace MessageService; use EnqueueAmqpLibAmqpConnectionFactory; use InteropAmqpAmqpContext; use InteropAmqpAmqpMessage; class Consumer { private $context; public function __construct() { $config = include 'config/rabbitmq.php'; $connectionFactory = new AmqpConnectionFactory($config['connections']['default']); $this->context = $connectionFactory->createContext(); } public function consume(): void { $this->context->declareQueue($this->context->createQueue('message_queue')); $consumer = $this->context->createConsumer($this->context->createQueue('message_queue')); while (true) { if ($message = $consumer->receive(3000)) { echo 'Received message: ' . $message->getBody() . PHP_EOL; $consumer->acknowledge($message); } } } }
index.php ファイルでは、プロデューサとコンシューマを使用してメッセージを送受信できます。コードは次のとおりです。
<?php require __DIR__ . '/vendor/autoload.php'; use MessageServiceProducer; use MessageServiceConsumer; $producer = new Producer(); $producer->publish('Hello, World!'); $consumer = new Consumer(); $consumer->consume();
index.php スクリプトを実行すると、テストに使用されるメッセージが送受信されていることがわかります。
以上がPHP マイクロサービスを使用して分散メッセージ通信とプッシュを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。