JMS/ 持続ストレージ

■持続ストレージ
信頼性を支える1側面。

一度持続メッセージが送信先に配信されると、
そのメッセージがコンシューマに配信されるまで、
メッセージサービスが失われないようにすること。

送信先への持続メッセージの配信では、
メッセージサービスが持続メッセージを持続データストアに配置する。

何らかの理由でメッセージサービスが停止した場合、
持続データ格納ではメッセージが修復され、適切なコンシューマに配信される。

→メッセージ配信にオーバーヘッドが発生するが、信頼性は向上する。


□パフォーマンスの兼ね合い
メッセージ配信の信頼性が高い程、
その信頼性を実現する為に、より多くのオーバーヘッドや帯域幅が必要になる。
信頼性とパフォーマンスの兼ね合いは、設計上考慮すべき点。

持続性の無いメッセージのプロデュース/コンシュームする設計で、
最大のパフォーマンスとスループットが得られる。
一方、
処理済セッションを使用するトランザクションでの持続的メッセージをプロデュース/コンシュームで、
最大の信頼性が得られる。

どちらを優先させるかはMQ固有の持続性や通知プロパティの使用、アプリの必要性に寄る。


□メッセージのコンシューム:同期と非同期
JMSクライアントがメッセージをコンシュームする方法は、同期と非同期の2つ。

*同期コンシューム:
クライアントは、MessageCunsumerオブジェクトのreceive()メソッドを呼んでメッセージを取得する。
クライアントスレッドは、メソッドが復帰するまでブロックされる。
→使用可能なメッセージが存在しない場合:
 メッセージが使用可能になるまでクライアントがブロックされるか、
 receive()メソッドがタイムアウトするまでクライアントがブロックされる。
⇒メッセージは、クライアントスレッドによって1つずつのコンシュームされる。

*非同期コンシューム:
クライアントは、メッセージコンシューマにMessageListenerオブジェクトを登録する。
メッセージリスナはコールバックオブジェクトのように機能する。
セッションがMessageListenerオブジェクトのonMessage()メソッドを呼ぶことで、
クライアントがメッセージをコンシュームする。
⇒クライアントスレッドはブロックされず、メッセージが非同期でコンシュームされる。


□メッセージの選択
JMSには、
メッセージセレクタに設定された条件に基づくフィルタや転送を、
メッセージサービスが実行出来るメカニズムがある。
producingClientは、アプリ固有のpropertyをmessageに設定できる。
consumingClientは、設定されたpropertyに基づく選択条件で、メッセージの項目を示すことが出来る。
これにより、クライアントの作業が単純になり、不要なクライアントへの配信メッセージのオーバーヘッドを回避できる。
ただし、
選択条件の処理にオーバーヘッドが発生する。


□メッセージの順番と優先度
一般には、単位のセッションにより送信先に設定された全てのメッセージは、
送信された順にコンシューマへ配信される。
ただし、
別々のpropertyが割り当てられている場合、
メッセージングサービスは、優先度の高いメッセージを先に配信しようとする。



ref:
Sun ONE Message Queue 開発者ガイド (★★★★☆)
http://docs.sun.com/source/816-6459/overview.html#18664

tag : JMS MessageCunsumer MessageListener receive onMessage

2009-04-08 22:19 : __j2ee__jms : コメント : 0 : トラックバック : 0 :
コメントの投稿
非公開コメント

« next  ホーム  prev »

search

ad



counter


tag cloud

category cloud