Interstage JMSは、以下の高信頼な機能を提供します。
異常時のメッセージ退避
通常の処理または明示的な管理者による操作以外で、以下などの理由により、システムから破棄されるメッセージが存在します。
有効期限が切れた。
保持可能なメッセージ上限を超えたため物理格納先から破棄された。
配信処理に失敗した。
上記のような理由でシステムから破棄されたメッセージをデッドメッセージと呼びます。
メッセージブローカは、起動時に自動的にデッドメッセージを配置するデッドメッセージキューを作成します。メッセージブローカは、デッドメッセージをデッドメッセージキューに配置します。デッドメッセージキューには、「mq.sys.dmq」という固有の物理格納先の名前が設定され、削除することはできません。また、デッドメッセージキューに明示的にメッセージを送信することもできません。
異常時のメッセージ退避機能の使用
異常時のメッセージ退避機能は、デフォルトで有効になっています。メッセージ退避機能の使用有無は、物理格納先プロパティuseDMQで設定します。
物理格納先プロパティuseDMQの詳細については、「9.7.7 物理格納先の生成または更新に関するプロパティ」を参照してください。
例
異常時のメッセージ退避機能を使用しないように変更するコマンド実行例
imqcmd update dst -b localhost:37676 -n JMSQueue -t q -o useDMQ=false
デッドメッセージキューの管理
imqcmdコマンドを使用して、デッドメッセージキューを他の物理格納先と同じように管理できますが、以下の相違点があります。
デッドメッセージキューを作成、削除できません。
デッドメッセージキューのプロパティ省略値は、通常の物理格納先と異なります。
プロパティ | 通常の物理格納先との差異 | デッドメッセージキューの省略値 | その他の物理格納先の省略値 |
---|---|---|---|
limitBehavior | FLOW_CONTROLはサポートされません。 | REMOVE_OLDEST | REJECT_NEWEST |
maxNumMsgs | - | 1000 | -1(無制限) |
maxNumProducers | 変更できません。 | 0 | 100 |
maxTotalMsgBytes | - | 10M | -1(無制限) |
useDMQ | trueはサポートされません。 | false | true |
メッセージの内容
メッセージブローカは、メッセージ全体をデッドメッセージキューに配置できます。または、ヘッダーとプロパティデータだけを残して、メッセージ本体の内容を破棄できます。デフォルトでは、デッドメッセージキューはメッセージ全体を格納します。
デッドメッセージを復元する予定がない場合は、imq.destination.DMQ.truncateBodyメッセージブローカプロパティをtrueに設定してください。これにより、メッセージ本文が破棄され、ヘッダーとプロパティデータだけが残され、デッドメッセージキューのサイズを減らすことが可能です。
imq.destination.DMQ.truncateBodyの詳細については、「9.7.2 ルーティングサービスに関するプロパティ」を参照してください。
例
メッセージ本文を破棄してデッドメッセージキューに退避するように設定するコマンド実行例
imqcmd update bkr -b localhost:37676 -o imq.destination.DMQ.truncateBody=true
デッドメッセージのロギング
デッドメッセージのロギングとは、以下の事象が発生した場合、メッセージブローカがログ情報を記録する機能です。
メッセージブローカがデッドメッセージキューにメッセージを移動する。
メッセージブローカがデッドメッセージキューとデッドメッセージキューを使用していない物理格納先からメッセージを破棄する。
物理格納先が制限に達する。
デッドメッセージのロギングは、デフォルトでは無効になっています。デッドメッセージのロギングは、imq.destination.logDeadMsgsプロパティで設定します。デッドメッセージのロギングは、デッドメッセージキューを使用するすべての物理格納先に適用されます。物理格納先ごとにロギングを有効または無効に設定できません。
imq.destination.logDeadMsgsプロパティの詳細については、「9.7.6 ログ機能に関するプロパティ」を参照してください。
例
デッドメッセージのロギングを有効にするコマンド実行例
imqcmd update bkr -b localhost:37676 -o imq.destination.logDeadMsgs=true
デッドメッセージキューからのメッセージの復元
デッドメッセージキューに移動されたメッセージを参照する場合、Interstage JMSのキューブラウザ機能を使用することで、デッドメッセージキューに移動されたメッセージを参照できます。
デッドメッセージキューをJMSアプリケーション内で使用する場合、SessionクラスのcreateQueueメソッドを使用して、デッドメッセージキューを取得してください。
例
デッドメッセージキューを取得する場合のcreateQueueメソッドの例
Queue deadMessageQueue = session.createQueue("mq.sys.dmq") ;
デッドメッセージキューからのメッセージの破棄
デッドメッセージキューに移動されたメッセージが不要となった場合は、imqcmdコマンドでデッドメッセージキューに移動されたメッセージを破棄できます。詳細については、purge dstサブコマンド、またはpurge durサブコマンドを参照してください。
例
imqcmd purge dst -b localhost:37676 -t q -n mq.sys.dmq