ページの先頭行へ戻る
Interstage Application Server V12.0.0 Java EE 7 設計・構築・運用ガイド
FUJITSU Software

2.19.8 高信頼機能

Interstage JMSは、以下の高信頼な機能を提供します。

異常時のメッセージ退避

以下のような理由でシステムから破棄されたメッセージを、デッドメッセージと呼びます。

メッセージブローカは、メッセージの有効期限切れを以下のように検出します。

imq.message.expiration.intervalプロパティの詳細については、「8.7.2 ルーティングサービスに関するプロパティ」を参照してください。


メッセージブローカは、起動時に自動的にデッドメッセージを配置するデッドメッセージキューを作成します。
デッドメッセージキューには、「mq.sys.dmq」という固有の物理格納先の名前が設定され、削除できません。デッドメッセージキューに明示的にメッセージを送信することもできません。

また、メッセージブローカは、デッドメッセージをデッドメッセージキューに配置します。


異常時のメッセージ退避機能の使用

異常時のメッセージ退避機能は、デフォルトで有効になっています。メッセージ退避機能の使用有無は、useDMQプロパティで設定します。
useDMQプロパティの詳細については、「8.7.7 物理格納先の生成または更新に関するプロパティ」を参照してください。

異常時のメッセージ退避機能を使用しないように変更するコマンド実行例

C:\Interstage\F3FMisje7\mq\bin\imqcmd update dst -b localhost:27676 -n JMSQueue -t q -o useDMQ=false

/opt/FJSVisje7/mq/bin/imqcmd update dst -b localhost:27676 -n JMSQueue -t q -o useDMQ=false

デッドメッセージキューの管理

imqcmdコマンドを使用して、デッドメッセージキューを他の物理格納先と同じように管理できますが、以下の相違点があります。

メッセージの内容

メッセージブローカは、メッセージ全体をデッドメッセージキューに配置できます。または、ヘッダーとプロパティデータだけを残して、メッセージ本体の内容を破棄できます。デフォルトでは、デッドメッセージキューはメッセージ全体を格納します。
デッドメッセージを復元する予定がない場合は、imq.destination.DMQ.truncateBodyプロパティを「true」に設定してください。これにより、メッセージ本文が破棄され、ヘッダーとプロパティデータだけが残され、デッドメッセージキューのサイズを減らすことができます。
imq.destination.DMQ.truncateBodyプロパティの詳細については、「8.7.2 ルーティングサービスに関するプロパティ」を参照してください。


メッセージ本文を破棄してデッドメッセージキューに退避するように設定する例

C:\Interstage\F3FMisje7\mq\bin\imqbrokerd -Dimq.destination.DMQ.truncateBody=true

/opt/FJSVisje7/mq/bin/imqbrokerd -Dimq.destination.DMQ.truncateBody=true

デッドメッセージのロギング

デッドメッセージのロギングとは、以下の事象が発生した場合、メッセージブローカがログ情報を記録する機能です。

デッドメッセージのロギングは、デフォルトでは無効になっています。デッドメッセージのロギングは、imq.destination.logDeadMsgsプロパティで設定します。デッドメッセージのロギングは、デッドメッセージキューを使用するすべての物理格納先に適用されます。物理格納先ごとに、ロギングの有効/無効を設定することはできません。
imq.destination.logDeadMsgsプロパティの詳細については、「8.7.6 ログ機能に関するプロパティ」を参照してください。

デッドメッセージのロギングを有効にする例

C:\Interstage\F3FMisje7\mq\bin\imqbrokerd -Dimq.destination.logDeadMsgs=true

/opt/FJSVisje7/mq/bin/imqbrokerd -Dimq.destination.logDeadMsgs=true

デッドメッセージキューからのメッセージの復元

デッドメッセージキューに移動されたメッセージは、Interstage JMSのキューブラウザ機能を使用して参照します。
デッドメッセージキューをJMSクライアントアプリケーション内で使用する場合は、以下のAPIを使用して、デッドメッセージキューを取得してください。

javax.jms.Session#createQueue(String)でデッドメッセージキューを取得する場合の例

Queue deadMessageQueue = session.createQueue("mq.sys.dmq") ;

デッドメッセージキューからのメッセージの破棄

デッドメッセージキューに移動されたメッセージが不要となった場合は、imqcmdコマンドで破棄します。詳細については、「10.6.11 purge dstサブコマンド」を参照してください。

デッドメッセージキューからメッセージを破棄するコマンド実行例

C:\Interstage\F3FMisje7\mq\bin\imqcmd purge dst -b localhost:27676 -t q -n mq.sys.dmq

/opt/FJSVisje7/mq/bin/imqcmd purge dst -b localhost:27676 -t q -n mq.sys.dmq