JMSの利用目的に応じて設計します。
メッセージの宛先到達時に、自動的に処理する
javax.jms.MessageListenerを使用します。
Publish/Subscribeモデルにおいて、受信するJMSクライアントアプリケーションが停止中に配信されたメッセージを受信する
JMS規約のDurable Subscription機能を使用します。
JMS 2.0規約のShared Subscription機能を使用します。
システムダウン、アプリケーション異常によるメッセージロストを防止する
メッセージの不揮発化機能を使用します。
メッセージの不揮発化/揮発化は、以下のメッセージの配信モードをいずれかのAPIで設定してください。
メッセージの配信モード
不揮発化
javax.jms.DeliveryMode.PERSISTENT(デフォルト)
揮発化
javax.jms.DeliveryMode.NON_PERSISTENT
API
javax.jms.MessageProducer.setDeliveryMode(int deliveryMode)
javax.jms.MessageProducer.send(Message message, int deliveryMode, int priority, long timeToLive)
javax.jms.MessageProducer.send(Destination destination, Message message, int deliveryMode, int priority, long timeToLive)
javax.jms.MessageProducer.send(Message message, int deliveryMode, int priority, long timeToLive, CompletionListener completionListener)
javax.jms.MessageProducer.send(Destination destination, Message message, int deliveryMode, int priority, long timeToLive, CompletionListener completionListener)
javax.jms.JMSProducer.setDeliveryMode(int deliveryMode)
メッセージのトランザクション制御を実施する
JTAを使用したトランザクション管理機能を使用してください。
リソースマネージャが提供するトランザクション管理機能を使用してください。
単一のトランザクションで送信または受信できるメッセージの数には制限があります。送信メッセージのデフォルト値は1000件、受信メッセージのデフォルト値は100件です。
制限値を変更したい場合は、以下のプロパティを設定してください。
imq.transaction.producer.maxNumMsgs
imq.transaction.consumer.maxNumMsgs
プロパティの詳細については「8.7.2 ルーティングサービスに関するプロパティ」を参照してください。
受信アプリケーションが特定の条件に該当するメッセージを取得する
メッセージセレクタ機能を使用するには、以下のようにアプリケーションを作成する必要があります。
送信アプリケーション
メッセージの作成時に、メッセージセレクタの対象となるプロパティ値を指定します。
例
プロパティ名に「NAME」、プロパティ値に「FUJITSU」を設定する場合
javax.jms.Message message = session.createMessage(); String name = "FUJITSU"; message.setStringProperty("NAME", name);
受信アプリケーション
javax.jms.MessageConsumer、javax.jms.JMSConsumerおよびjavax.jms.QueueBrowserの作成時に、パラメタとしてメッセージセレクタ文を指定します。
例
プロパティ名が「NAME」でプロパティ値が「FUJITSU」のメッセージを受信するためにjavax.jms.MessageConsumerを作成する場合
String selector = "NAME = 'FUJITSU'"; javax.jms.MessageConsumer consumer = session.createConsumer(destination, selector);
Point-To-Pointメッセージングモデルにおいて、キューに蓄積されているメッセージを参照する
JMS規約のキューブラウザを使用します。
特定のメッセージを優先的に受信する
送信メッセージに以下のAPIを使用して優先度を設定します。
優先度は、0(低)から9(高)まで設定できます。デフォルトの優先度は、4です。
javax.jms.MessageProducer.setPriority(int priority)
javax.jms.MessageProducer.send(Message message, int deliveryMode, int priority, long timeToLive)
javax.jms.MessageProducer.send(Destination destination, Message message, int deliveryMode, int priority, long timeToLive)
javax.jms.MessageProducer.send(Message message, int deliveryMode, int priority, long timeToLive, CompletionListener completionListener)
javax.jms.MessageProducer.send(Destination destination, Message message, int deliveryMode, int priority, long timeToLive, CompletionListener completionListener)
javax.jms.JMSProducer.setPriority(int priority)
メッセージに有効期限を設定する
送信メッセージに以下のAPIを使用してメッセージの有効期限(ミリ秒)を設定します。
デフォルトの有効期限は、0(無制限)です。
javax.jms.MessageProducer.setTimeToLive(long timeToLive)
javax.jms.MessageProducer.send(Message message, int deliveryMode, int priority, long timeToLive)
javax.jms.MessageProducer.send(Destination destination, Message message, int deliveryMode, int priority, long timeToLive)
javax.jms.MessageProducer.send(Message message, int deliveryMode, int priority, long timeToLive, CompletionListener completionListener)
javax.jms.MessageProducer.send(Destination destination, Message message, int deliveryMode, int priority, long timeToLive, CompletionListener completionListener)
javax.jms.JMSProducer.setTimeToLive(long timeToLive)
メッセージの配信を遅延させる
以下のAPIを使用して、メッセージ配信の遅延時間(ミリ秒)を設定します。
デフォルトの遅延時間は、0(遅延なし)です。
JMS 2.0よりサポートされています。
javax.jms.MessageProducer.setDeliveryDelay(long deliveryDelay)
javax.jms.JMSProducer.setDeliveryDelay(long deliveryDelay)
メッセージを非同期で送信する
以下のAPIを使用して、非同期コールバックオブジェクトを設定します。非同期コールバックオブジェクトを設定すると、プロデューサは非同期でメッセージを送信します。
JMS 2.0よりサポートされています。
javax.jms.MessageProducer.send(Message message, CompletionListener completionListener)
javax.jms.MessageProducer.send(Message message, int deliveryMode, int priority, long timeToLive, CompletionListener completionListener)
javax.jms.MessageProducer.send(Destination destination, Message message, CompletionListener completionListener)
javax.jms.MessageProducer.send(Destination destination, Message message, int deliveryMode, int priority, long timeToLive, CompletionListener completionListener)
javax.jms.JMSProducer.setAsync(CompletionListener completionListener)