ホームページ  >  記事  >  バックエンド開発  >  JMSのメッセージ通信モデル

JMSのメッセージ通信モデル

WBOY
WBOYオリジナル
2016-06-13 12:17:021155ブラウズ

JMS のメッセージ通信モデル

1. MQ の概要:

JMSのメッセージ通信モデル

メッセージ キュー (略して MQ) は、アプリケーション間の通信方式です。アプリケーションは、アプリケーション固有のデータ (キューに入れられたりキューに入れられたりするメッセージ) を送信および取得することによって通信します。これらのデータをリンクする専用の接続は必要ありません。プログラムは、相互に直接呼び出しを行うのではなく、メッセージでデータを送信することによって相互に通信します。これは通常、RPC リモート プロシージャ コールなどの手法で使用されます。キューを使用すると、受信アプリケーションと送信アプリケーションを同時に実行する必要がなくなります。

2. JMS の基本概念

JMS (Java Message Service) は、Sun によって開発された Java Message Service です。エンタープライズ アプリケーションの開発を簡素化するために、メッセージを生成、送信、受信するための標準インターフェイスを提供します。

JMS はインターフェイスと関連するセマンティクスの集合であり、これらのインターフェイスとメソッドを通じて、JMS クライアントはどのようにメッセージング システムにアクセスし、エンタープライズ メッセージング システムでのメッセージの作成、送信、受信、読み取りを完了しますか? 。

ポイントツーポイント モデル (ポイントツーポイント、P2P) とパブリッシャー/サブスクライバー モデル (Pub/Sub) の 2 つのメッセージ通信モデルをサポートします。 P2P モデルでは、メッセージの受信者は 1 人のみであることが規定されていますが、Pub/Sub モデルでは、メッセージに複数の受信者が存在することが許可されます。

2.1 P2P モデル - 通話モデル

P2P モデルの場合、メッセージ作成者がメッセージを生成した後、メッセージをキュー (キュー) に送信し、メッセージ受信者がメッセージを受信します。このメッセージはキューから読み取られます。メッセージは受信者によって読み取られるとキューから消えるため、メッセージは 1 つの受信者のみが使用できます。

JMSのメッセージ通信モデル

2.2 Pub/Sub モデル - 新聞注文モデル

Pub/Sub モデルでは、メッセージプロデューサーがメッセージを生成した後、P2P モデルとは異なります。 , このメッセージはトピックに送信され、複数の受信者が同時にリッスンすることができ、メッセージがこのトピックに到着すると、すべてのメッセージ受信者がメッセージを受信します。

JMSのメッセージ通信モデル

3. JMS をサポートするオープン ソース MQ - ActiveMQ

ActiveMQ は、Apache によって作成された最も人気のある強力なオープン ソース メッセージ バスです。 ActiveMQ は、JMS1.1 および J2EE 1.4 仕様を完全にサポートする JMS プロバイダー実装です。

主な機能:

  1. 複数の言語とプロトコルでクライアントを作成します。言語: Java、C、C、C#、Ruby、Perl、Python、PHP。アプリケーションプロトコル: OpenWire、Stomp、Rest、WSNotification、XMPP、AMQP
  2. JMS1.1 および J2EE 1.4 仕様 (永続性、XA メッセージ、トランザクション) を完全にサポート
  3. をサポート複数の送信プロトコル: VM 内、TCP、SSL、NIO、UDP、JGroups、JXTA
  4. 高速メッセージ永続性をサポート
  5. 設計により保証 高性能クラスター、クライアントサーバー、ポイントツーポイント
  6. Ajax をサポート

注:

情報をクエリするプロセス中に、PHP がこの統合メソッドは、Rest インターフェイスを使用して直接呼び出すことができますが、より効率的な方法は、Stomp プロトコルの PHP 拡張機能をインストールすることです。

Stomp は、クライアントとブローカー間の広範なメッセージングのためのフレームワークを提供します。 Stomp は非常にシンプルで使いやすい通信プロトコルの実装です。エージェントの作成は非常に複雑ですが、Stomp クライアントの作成は非常に簡単です。また、Telnet を使用して Stomp エージェントと対話することもできます。

PHP は、PECL コンパイルを通じて Stomp 拡張機能をインストールできます。

stomp_common.php

<code>//connection ActiveMQ    function openMQ(&$queue=FALSE) {    $amq = array(        &#39;url&#39; => &#39;tcp://127.0.0.1:61613&#39;,        &#39;id&#39; => &#39;xxx&#39;,        &#39;pswd&#39; => &#39;xxx&#39;,        &#39;queue&#39; => &#39;/queue/mytest&#39;,        &#39;enable&#39; => TRUE    );    $link = stomp_connect($amq[&#39;url&#39;], $amq[&#39;id&#39;], $amq[&#39;pswd&#39;]);    if (!$link) {        die("Can&#39;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[&#39;queue&#39;], $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[&#39;headers&#39;][&#39;message-id&#39;]);             } else {                //do something                break;                }            } else {                break;            }        }        stomp_unsubscribe($link, $queue);        stomp_close($link);    }    </code>

stomp_sender.php

<code>// 消息发送服务</code>

stomp_consumer.php

<code>// 消息消费服务</code>
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。