JMS(Java Message Serviceのは)入門チュートリアル(A)

 

Javaメッセージサービスとは何ですか 

  これは、Javaアプリケーションの開発をサポートするために、など、作成、送信、メッセージを読むなど、標準のメッセージプロトコルおよびメッセージサービスのための共通のインターフェースを提供し、2つのアプリケーションAPIとの間の非同期通信のためのJavaメッセージサービスを指し、 。2つのJMSアプリケーションは、それらの間の通信に使用するJ2EEでは、直接接続されていませんが、一般的なメッセージングサービスを介して接続されている、デカップリング効果を達成することができ、我々は次になります詳細チュートリアル。

なぜ我々は、JMSが必要なのか

  JAVAでは、2つのアプリケーション間の場合でも、これら2つのプログラムが異なる大陸に配備することができる、自分で理解していないので、どのようにそれらの間でメッセージを送信するには?例えば、インドA、米国で展開し、別のアプリケーションにデプロイされたアプリケーションは、その後、何かがA、BはAからのいくつかの更新情報を取得したいときにトリガされます もちろん、A、Bへの関心の複数の更新情報であってもよく、Bは、N個のアプリケーションと同様A.から更新された情報を取得することができます

  この場合は、JAVAは、最善の解決策の-JMS、上述の問題に最適なソリューションを提供します。

  同じことは、このようなサーバーに接続しているすべてのクライアントにイベントメッセージを送信するための放出機構を必要とするチャットサービス、などのJMSベースのアプリケーションのイベントに適用されます。JMSとRMIは、メッセージを送信する場合、受信者がオンライン必要はありません異なっています。サーバは、メッセージ、問題を送信し、サーバーから送信されたメッセージの受信を確実にするために、ライン上のクライアントまで待ちます。これは、今日の世界では、多くの一般的な問題を扱うことができる非常に強力なソリューションです。

JMSの利点

非同期な

  JMSは、クライアントがメッセージを取得し、要求を送信するためのイニシアチブを取る必要がない場合、メッセージは自動的に使用可能なクライアントに送信され、本質的に非同期です。

信頼性の高いです

  JMSは、メッセージが一度だけ配信されることを確実にします。私たちは、繰り返しの問題は、メッセージを作成遭遇してきた、とJMSは、あなたがこの問題を回避するのに役立ちます。

JMSメッセージングモデル

  JMS APIが表示される前に、製品のほとんどは、「ポイント」を使用して、メッセージを通信するためのいずれかの方法で「パブリッシュ/サブスクライブ」。JMSは、彼らが互いに独立しており、2つのメッセージング仕様モデルを定義します。任意のJMSプロバイダは、それが自分の選択で、そのうちの一つまたは二つのモデルを実装することができます。JMS仕様では、JMS APIに基づく弊社で用意されたプログラムは、すべてのモデルに適用可能であることを保証するために、共通のインタフェースを提供します。

  私たちは、より詳細に、この2つのメッセージ配信モデルを見てみましょう:

メッセージングモデルをポイントツーポイント

  点でメッセージングモデル、送信側、受信側コンポーネントによってアプリケーション・メッセージ・キューを指すように。すべてのメッセージを保存する特別なメッセージ・キューに送られた各メッセージ(に送信されたメッセージの受信者を追加すると有効期限が離れて消費されます)。次のようにメッセージングモデルを指すようにポイントはいくつかの特徴があります。

  • 各メッセージは、唯一の受信者です。
  • メッセージ送信者と受信者は、時間に依存していません。
  • メッセージの送信者は、メッセージを送信するときは、関係なく、プログラム内の受信者で実行されていないのは、メッセージを取得することができます。
  • 受信者がメッセージを受信すると、それは領収書(確認応答)の確認応答を送信します。

パブリッシュ/ メッセージングモデルをサブスクライブ

  パブリッシュ/サブスクライブ・メッセージング・モデルでは、パブリッシャーは、トピックによって、すべてのクライアントにメッセージ、およびメッセージをリリースしました。このモデルでは、お互いを知らないパブリッシャとサブスクライバは、匿名で、動的に公開して話題を購読することができます。メッセージがクライアントに配信されるまでの保存とメッセージ、およびメッセージを届けるための主なトピックは、保存されたままになります。

次のようにモデル特性があるメッセージングパブリッシュ/サブスクライブ:

  • メッセージは、複数の加入者に渡すことができます
  • パブリッシャとサブスクライバは、時間依存のクライアントがメッセージを受信するためにサブスクリプションを作成し、加入者がメッセージを受信するためにアクティブなままにする必要があるだけです。
  • そのような厳密な時間相関を緩和するために、JMSは、加入者が永続的なサブスクリプションを作成することができます。このように、加入者が(実行)が起動されていない場合でも、それはまた、メッセージのパブリッシャを受け取ることができます。

メッセージを受信します

  JMSにおいて、受信したメッセージは、2つの方法で使用することができます。

シンクロナス

  同期モードを使用してメッセージを受信し、そのメッセージを加入者コールは()メソッドを受け取ります。()受信では、メッセージは、指定された時間に達していない、または前に、本方法は、メッセージが使用可能になるまでブロックされます。

非同期な

  非同期メッセージを受信し、メッセージの加入者がイベントリスナーに似たメッセージリスナを登録する必要がある限り、メッセージが到着すると、JMSサービスプロバイダは、リスナーのonMessage()を呼び出すことによって、メッセージを配信します。

JMSプログラミングインタフェース

  JMSアプリケーションは、以下の基本モジュールで構成されています。

  1. 管理オブジェクト(管理対象オブジェクト) - 接続ファクトリ(接続ファクトリ)と宛先(デスティネーション)
  2. 接続オブジェクト(接続)
  3. セッション(セッション)
  4. プロデューサメッセージ(メッセージプロデューサ)
  5. メッセージコンシューマ(メッセージコンシューマ)
  6. メッセージリスナ(メッセージリスナ)

JMS管理オブジェクト

管理オブジェクト(管理対象オブジェクト)はJMSクライアントを使用して、システム管理者によって作成された事前設定されたJMSオブジェクトである、管理対象となる2つのオブジェクトがあります。

  • 接続ファクトリー(のConnectionFactory)
  • デスティネーション(目的地)

システム管理者はJMS、JNDIネームスペースやJNDIレジストリによって作成されたアプリケーションサーバーの管理コンソールを使用することにより、2つの管理対象オブジェクトは、アプリケーション・サーバーに格納されています。

接続ファクトリー(のConnectionFactory)

クライアントは、それがJMSサービスプロバイダとクライアント間の接続を作成し、サービスプロバイダに接続するためにJMS接続ファクトリオブジェクトを使用しています。(例えば、送信者や受信者など)JMSクライアントがを検索し、接続JNDI名前空間を取得します。この接続を使用すると、クライアントは、キューの対象、缶、または送信/送信先通信でメッセージを受信します。さんがメッセージを送信する方法を理解するために例を使用してみましょう:

QueueConnectionFactory queueConnFactory =(のQueueConnectionFactory)initialCtx.lookup( "primaryQCF")。
キューpurchaseQueue =(キュー)initialCtx.lookup( "Purchase_Queue")。
キューreturnQueue =(キュー)initialCtx.lookup( "Return_Queue")。

デスティネーション(目的地)

指定された宛先、およびメッセージを受信する宛先クライアントは、メッセージの送信元を送りました。2つの宛先、キューとトピックを使用してJMS。コードの後に​​は、キューとトピックを指定します。

キュー・セッションの作成

QueueSession ses = con.createQueueSession (false, Session.AUTO_ACKNOWLEDGE);  //get the Queue object  
Queue t = (Queue) ctx.lookup ("myQueue");  //create QueueReceiver  
QueueReceiver receiver = ses.createReceiver(t); 

创建一个话题Session

TopicSession ses = con.createTopicSession (false, Session.AUTO_ACKNOWLEDGE); // get the Topic object  
Topic t = (Topic) ctx.lookup ("myTopic");  //create TopicSubscriber  
TopicSubscriber receiver = ses.createSubscriber(t);  

JMS连接

连接对象封装了与JMS提供者之间的虚拟连接,如果我们有一个ConnectionFactory对象,可以使用它来创建一个连接。

Connection connection = connectionFactory.createConnection();

创建完连接后,需要在程序使用结束后关闭它:

connection.close();

JMS 会话(Session)

Session是一个单线程上下文,用于生产和消费消息,可以创建出消息生产者和消息消费者。

Session对象实现了Session接口,在创建完连接后,我们可以使用它创建Session。

Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

JMS消息生产者

消息生产者由Session创建,用于往目的地发送消息。生产者实现MessageProducer接口,我们可以为目的地、队列或话题创建生产者;

MessageProducer producer = session.createProducer(dest);
MessageProducer producer = session.createProducer(queue);
MessageProducer producer = session.createProducer(topic);

创建完消息生产者后,可以使用send方法发送消息:

producer.send(message);

JMS消息消费者

消息消费者由Session创建,用于接受目的地发送的消息。消费者实现MessageConsumer接口,,我们可以为目的地、队列或话题创建消费者;

MessageConsumer consumer = session.createConsumer(dest);
MessageConsumer consumer = session.createConsumer(queue);
MessageConsumer consumer = session.createConsumer(topic);

JMS消息监听器

JMS消息监听器是消息的默认事件处理者,他实现了MessageListener接口,该接口包含一个onMessage方法,在该方法中需要定义消息达到后的具体动作。通过调用setMessageListener方法我们给指定消费者定义了消息监听器

Listener myListener = new Listener();
consumer.setMessageListener(myListener);

JMS消息结构

JMS客户端使用JMS消息与系统通讯,JMS消息虽然格式简单但是非常灵活, JMS消息由三部分组成:

消息头

JMS消息头预定义了若干字段用于客户端与JMS提供者之间识别和发送消息,预编译头如下:

– JMSDestination
– JMSDeliveryMode
– JMSMessageID
– JMSTimestamp
– JMSCorrelationID
– JMSReplyTo
– JMSRedelivered
– JMSType
– JMSExpiration
– JMSPriority

消息属性

我们可以给消息设置自定义属性,这些属性主要是提供给应用程序的。对于实现消息过滤功能,消息属性非常有用,JMS API定义了一些标准属性,JMS服务提供者可以选择性的提供部分标准属性。

消息体

在消息体中,JMS API定义了五种类型的消息格式,让我们可以以不同的形式发送和接受消息,并提供了对已有消息格式的兼容。不同的消息类型如下:

Text message : javax.jms.TextMessage,表示一个文本对象。
Object message : javax.jms.ObjectMessage,表示一个JAVA对象。
Bytes message : javax.jms.BytesMessage,表示字节数据。
Stream message :javax.jms.StreamMessage,表示java原始值数据流。
Map message : javax.jms.MapMessage,表示键值对。

おすすめ

転載: www.cnblogs.com/JonaLin/p/11506013.html