JMS機能を使用する場合、以下に注意してください。
コンシューマのパフォーマンスについての注意事項
consumerFlowLimitプロパティの値を大きくした場合、コンシューマの多重化運用時やロールバック処理が頻繁に発生する運用では、パフォーマンスが低下する場合があります。
構築するシステムを考慮して、consumerFlowLimitプロパティの値を設定してください。
トランザクション運用時の注意事項
JMSクライアントアプリケーションがトランザクション運用を行う場合、メッセージブローカは、トランザクションの情報をファイルに格納します。
Java EE共通ディレクトリに、以下の見積り式で算出した値以上の空きディスク容量を確保してください。
見積り値 = (1トランザクションで送受信するメッセージ数 × 500kB) × |
受信アプリケーションがnull復帰する場合の注意事項
受信アプリケーションで以下のメソッドを使用した場合に、受信可能なメッセージが存在するにもかかわらず、nullが復帰する場合があります。
receiveNoWaitメソッド
受信タイムアウト時間の値を小さくした場合のreceiveメソッド
本現象が発生した場合は、上記メソッドのリトライを実施してください。
メッセージを大量に蓄積する運用時の注意事項
メッセージを大量に蓄積する運用の場合、送信アプリケーションの処理が遅延する場合があります。
メッセージブローカのログに、メモリ不足を示す以下のいずれかのメッセージが出力されていないか確認してください。
INFO: IJMQ_B1089: In low memory condition, Broker is attempting to free up resources
INFO: IJMQ_B1088: Entering Memory State RED from previous state ORANGE - allocated memory is nnnnnnK, nn% of total memory used
上記メッセージが出力されていた場合、各メッセージの[ユーザの対処]に従い対処してください。
Sessionクラスのメソッド使用時の注意事項
Sessionクラスの以下のメソッドを使用する場合は、MessageConsumerクラスのcloseメソッドを使用しないでください。
recoverメソッド
rollbackメソッド
MessageConsumerのcloseメソッドを実施する必要がある場合は、Session.close()を実施してください。
imqcmd list dur コマンド使用時の注意事項
メッセージブローカを再起動した場合、Number of Messageが0で表示される場合があります。
imqcmd list dst コマンドで蓄積されているメッセージ数を確認してください。
複数のコンシューマ使用時の注意事項
Queueタイプの物理格納先にメッセージが蓄積している場合、consumerFlowLimitで設定したメッセージ数を一単位として、蓄積されているメッセージがなくなるまでコンシューマにメッセージが配信されます。
consumerFlowLimit が大き過ぎる場合は、あるコンシューマがQueueタイプの物理格納先内のすべてのメッセージを受信し、そのほかのコンシューマはメッセージを受信していないことがあります。
メッセージをコンシューマに均等に分散させたい場合は、consumerFlowLimitを小さく設定する必要があります。
たとえば、consumerFlowLimitに100を設定し、物理格納先に50件のメッセージが蓄積している状態では、先に接続したコンシューマAが50件すべてのメッセージを受信します。あとから接続したコンシューマBは1件もメッセージを受信できません。
また、consumerFlowLimitに10を設定し、物理格納先に100件のメッセージが蓄積している状態では、メッセージはコンシューマAとコンシューマBに分散されそれぞれのコンシューマで受信することができます。
ただし、consumerFlowLimitが小さいほど、メッセージをコンシューマへ配信するのに必要なオーバーヘッドは増加します。