JMS のメッセージ通信モデル
メッセージ キュー (略して MQ) は、アプリケーション間の通信方式です。アプリケーションは、アプリケーション固有のデータ (キューに入れられたりキューに入れられたりするメッセージ) を送信および取得することによって通信します。これらのデータをリンクする専用の接続は必要ありません。プログラムは、相互に直接呼び出しを行うのではなく、メッセージでデータを送信することによって相互に通信します。これは通常、RPC リモート プロシージャ コールなどの手法で使用されます。キューを使用すると、受信アプリケーションと送信アプリケーションを同時に実行する必要がなくなります。
JMS (Java Message Service) は、Sun によって開発された Java Message Service です。エンタープライズ アプリケーションの開発を簡素化するために、メッセージを生成、送信、受信するための標準インターフェイスを提供します。
JMS はインターフェイスと関連するセマンティクスの集合であり、これらのインターフェイスとメソッドを通じて、JMS クライアントはどのようにメッセージング システムにアクセスし、エンタープライズ メッセージング システムでのメッセージの作成、送信、受信、読み取りを完了しますか? 。
ポイントツーポイント モデル (ポイントツーポイント、P2P) とパブリッシャー/サブスクライバー モデル (Pub/Sub) の 2 つのメッセージ通信モデルをサポートします。 P2P モデルでは、メッセージの受信者は 1 人のみであることが規定されていますが、Pub/Sub モデルでは、メッセージに複数の受信者が存在することが許可されます。
P2P モデルの場合、メッセージ作成者がメッセージを生成した後、メッセージをキュー (キュー) に送信し、メッセージ受信者がメッセージを受信します。このメッセージはキューから読み取られます。メッセージは受信者によって読み取られるとキューから消えるため、メッセージは 1 つの受信者のみが使用できます。
Pub/Sub モデルでは、メッセージプロデューサーがメッセージを生成した後、P2P モデルとは異なります。 , このメッセージはトピックに送信され、複数の受信者が同時にリッスンすることができ、メッセージがこのトピックに到着すると、すべてのメッセージ受信者がメッセージを受信します。
ActiveMQ は、Apache によって作成された最も人気のある強力なオープン ソース メッセージ バスです。 ActiveMQ は、JMS1.1 および J2EE 1.4 仕様を完全にサポートする JMS プロバイダー実装です。
主な機能:
注:
情報をクエリするプロセス中に、PHP がこの統合メソッドは、Rest インターフェイスを使用して直接呼び出すことができますが、より効率的な方法は、Stomp プロトコルの PHP 拡張機能をインストールすることです。
Stomp は、クライアントとブローカー間の広範なメッセージングのためのフレームワークを提供します。 Stomp は非常にシンプルで使いやすい通信プロトコルの実装です。エージェントの作成は非常に複雑ですが、Stomp クライアントの作成は非常に簡単です。また、Telnet を使用して Stomp エージェントと対話することもできます。
PHP は、PECL コンパイルを通じて Stomp 拡張機能をインストールできます。
stomp_common.php
<code>//connection ActiveMQ function openMQ(&$queue=FALSE) { $amq = array( 'url' => 'tcp://127.0.0.1:61613', 'id' => 'xxx', 'pswd' => 'xxx', 'queue' => '/queue/mytest', 'enable' => TRUE ); $link = stomp_connect($amq['url'], $amq['id'], $amq['pswd']); if (!$link) { die("Can't connect MQ !!"); } else { return $link; }}//send a message to the queuefunction sendMQ($data) { $link = openMQ(); foreach ($data as $pitem) { //使用 persistent message $result = stomp_send($link, $amq['queue'], $pitem, array("persistent" => "true")); if (FALSE === $result) { //do something } }}//receive messagefunction receiveMQ() { $link = openMQ($queue); //stomp_subscribe($link, $queue); stomp_subscribe($link, $queue, array("activemq.prefetchSize" => 1000)); while (1) { if (TRUE === stomp_has_frame($link)) { $frame = stomp_read_frame($link); if (FALSE !== $frame) { stomp_ack($link, $frame['headers']['message-id']); } else { //do something break; } } else { break; } } stomp_unsubscribe($link, $queue); stomp_close($link); } </code>
stomp_sender.php
<code>// 消息发送服务</code>
stomp_consumer.php
<code>// 消息消费服务</code>