インターネットビジネスの継続的な拡大により、システムの複雑さも増加しています。より高い可用性、保守性、スケーラビリティを達成するために、ますます多くの企業がマイクロサービスアーキテクチャを採用し始めています。このアーキテクチャでは、メッセージキューはサービス間の非同期コミュニケーションの重要なメカニズムになります。この記事では、PHPマイクロサービスアーキテクチャを使用して分散メッセージキューと通信方法を実装する方法を詳細に調べ、RabbitMQ、HTTP、およびRPCと組み合わせて詳細な説明を提供します。
マイクロサービスは、モノリシックアプリケーションを小さなサービスのグループに分割する建築モデルです。各サービスは、特定のビジネス機能を中心に構築されており、独立したデータベース、展開、メンテナンスプロセスがあります。相互作用するために、HTTP、RPC、メッセージキューなどのサービス間で軽量通信メカニズムが使用されます。このアーキテクチャは、システムの柔軟性、障害分離機能、および全体的な応答速度を改善するのに役立ちます。
分散環境では、メッセージキューを使用して、リクエストを非同期に処理し、システムのスループットと安定性を改善します。 RabbitMQは現在、広く分散されているメッセージングミドルウェアであり、複数のプロトコルと言語をサポートしており、高い並行性シナリオに適しています。
まず、RabbitMQをインストールする必要があります。オペレーティングシステムに基づいて、公式Webサイトでインストール手順を取得できます。インストールが完了した後、基本的な生産者と消費者モデルを次のPHPコードで実装できます。
require_once __dir __。 '/vendor/autoload.php'; phpamqplib \ connection \ amqpstreamConnectionを使用します。 phpamqplib \ message \ amqpmessageを使用します。 //プロデューサー$ connection = new amqpstreamConnection( 'localhost'、5672、 'guest'、 'guest'); $ channel = $ connection-> channel(); $ channel-> queue_declare( 'hello'、false、false、false、false); $ msg = new amqpmessage( 'hello world!'); $ channel-> basic_publish($ msg、 ''、 'hello'); echo "[x]は 'Hello World!' \ n"を送信しました。 $ channel-> close(); $ connection-> close();
// Consumer $ connection = new amqpstreamConnection( 'localhost'、5672、 'guest'、 'guest'); $ channel = $ connection-> channel(); $ channel-> queue_declare( 'hello'、false、false、false、false); echo "[*]メッセージを扱うっています。ctrl+c \ n"を外るまで。 $ callback = function($ msg){ echo '[x]受信'、$ msg-> body、 "\ n"; }; $ channel-> basic_consume( 'hello'、 ''、false、true、false、false、$ callback); while($ channel-> is_consuming()){ $ channel-> wait(); }
端末で次のコマンドを実行します。
php producer.php PHP Consumer.php
実行後、プロデューサーはメッセージをキューに送信し、消費者はメッセージを聴いて処理します。このメカニズムは、マルチ消費者の同時処理をサポートし、システムのパフォーマンスを向上させます。
マイクロサービス間の通信は、システム操作の重要なリンクです。以下は、3つの主流通信方法です。
HTTPは、ステートレスリクエストに適した最も一般的なサービス通信プロトコルです。 PHPで一般的に使用されるHTTPクライアントはガズルです。
「ベンダー/autoload.php」が必要です。 guzzlehttp \ clientを使用します。 $ client = new Client(); $ response = $ client-> request( 'get'、 'https://example.com'); echo $ response-> getBody();
RPC(リモートプロシージャコール)により、ローカル機能などのマイクロサービス間でリモートサービスを呼び出すことができます。 PHPでRPCをサポートするライブラリには、GRPCとThriftが含まれます。
require_once 'vendor/autoload.php'; Helloworld \ HelloreQuestを使用してください。 Helloworld \ GreetRclientを使用します。 $ client = new GreeterClient( 'localhost:50051'、[ 「資格情報」=> grpc \ channelcredentials :: createinsecure()、 ]); $ request = new HelloreQuest(); $ request-> setName( 'world'); $ response = $ client-> sayhello($ request); echo $ response-> getMessage();
前の記事では、サービス間の非同期コミュニケーションを実装するためにRabbitMQを使用していることが示されています。この方法には、強力なデカップリング、高い断層トレランス、および良好なスケーラビリティの利点があります。タスクキューイング、ログ、注文処理などのシナリオに適しています。
PHPを介してマイクロサービスアーキテクチャを構築し、分散メッセージキューと通信メカニズムを統合することは、最新の高性能システムを構築する重要な方法です。 Rabbitmqは、サービス間のゆるい結合通信を実装し、HTTPは定期的なサービスコールに適しており、RPCは低遅延および高周波相互作用に適しています。これらのテクノロジーを組み合わせることで、システムの堅牢性と応答性を大幅に改善できます。