JMS(一):JSM基礎を深く把握する


1.JMS基本概念     JMS(Java Message Service)は、Javaメッセージサービスです.標準的なメッセージの生成、送信、受信のためのインタフェースを提供し、企業 アプリケーションの開発を簡素化する.ポイント・ツー・ポイント(point-to-point)(P 2 P)モデルとパブリッシュ/サブスクリプション(Pub/sub)モデルの2つのメッセージ通信モデルをサポートします.P 2 Pモデルは、1つのメッセージに1人の受信者しかいないことを規定している.Pub/subモデルは、1つのメッセージに複数の受信者を許可する.    ポイント・ツー・ポイント・モデルでは、メッセージ・プロバイダがメッセージを生成した後、このメッセージをQueue(キュー)に送信し、メッセージ受信者がこのQueueから読み出し、このメッセージが受信者によって読み出されると、このQueueでは消え、1つのメッセージは1つの受信者によってしか消費されません.    ポイント・ツー・ポイント・モデルとは異なり、パブリッシュ/サブスクリプション・モデルでは、メッセージ・プロバイダがメッセージを生成した後、このメッセージを1つのTopicに送信します.このTopicは同時に複数の受信者が傍受することができ、1つのメッセージがこのTopicに到着すると、すべてのメッセージ受信者がこのメッセージを受信します.
簡単に言えば、ポイント・ツー・ポイント・モデルとパブリッシュ/サブスクリプション・モデルの違いは、前者が1対1であり、後者が1対多であることです.
2.いくつかの重要な概念    Destination :メッセージの送信先、つまり前述のQueueとTopicです.メッセージを作成した後、このメッセージを宛先に送信するだけで、メッセージの送信者は、メッセージが処理されるのを待つことなく、自分のことを続けることができます.このニュースがいつ、どの消費者に消費されるかは、メッセージの受信者にかかっている.    Message :文字通り送信されたメッセージであることがわかります.次のタイプがあります.        StreamMessage:Javaデータストリームメッセージは、標準ストリーム操作で順番に埋め込まれ、読み込まれます.        MapMessage:Mapタイプのメッセージ.名前はstringタイプで、値はJavaの基本タイプです.        TextMessage:Stringを含む通常の文字列メッセージ.        ObjectMessage:シーケンス可能なJavaオブジェクトを含むオブジェクトメッセージ        BytesMessage:byte[]を含むバイナリ配列メッセージ.        XMLMessage:  XMLタイプのメッセージ.    最もよく使われるのはTextMessageとObjectMessageです.   Session: JMSプロバイダとのセッションは、SessionによってMessageを作成できます.   Connection: JMSプロバイダとの接続.この接続からセッション、すなわちセッションを作成できます.   ConnectionFactory: では、どうやってConnectionを作成しますか?次のConnectionFactoryが必要です.このファクトリクラスによりJMSプロバイダとの接続,すなわちConectionが得られる.   Producer: メッセージの生産者は、メッセージを送信するには、この生産者を通じて送信する必要があります.   MessageConsumer: 生産者に対応して、これはメッセージの消費者または受信者であり、それによってメッセージを受信する.   JMSプロバイダについては、JMSが提供してくれたのは一連のインタフェースだけなので、JMSを使用するときは、本当に管理 のConnection、Session、Topic、Queueなどのサードパーティのプロバイダが必要です.
  ConnectionFactory---->Connection--->Session--->Message
  Destination + Session------------------------------------>Producer
  Destination + Session------------------------------------>MessageConsumer 
     以下の略図から,これらの概念の関係を見ることができる.
     では、ConnectionFactoryとDestinationはどこで手に入れたのでしょうか.    これはJMSプロバイダと関係があります.JavaEE環境ではJNDIで検索できますが、JavaEE環境ではない場合はJMSプロバイダが提供するインタフェースでしか入手できません.