2

MQ v7 ライブラリ (JMS なし) を使用して単純な Java クライアントを作成しました。次のパターンを使用してメッセージをキューに入れようとしました。

Put a message
Wait for x minutes
Put a message again

動作しますが、アイドル時間が長すぎる場合 (5 ~ 7 分)、次のエラーが発生します。

MQJE001: An MQException occurred: Completion Code 2, Reason 2195
MQJE007: IO error reading message data
Error occured during API call - reason code0
MQJE001: Completion Code 2, Reason 2009
MQJE001: An MQException occurred: Completion Code 2, Reason 2009
MQJE003: IO error transmitting message buffer
MQJE001: Completion Code 2, Reason 2009
MQJE001: An MQException occurred: Completion Code 2, Reason 2009
MQJE003: IO error transmitting message buffer
MQJE001: Completion Code 2, Reason 2009
MQJE001: An MQException occurred: Completion Code 2, Reason 2009
MQJE003: IO error transmitting message buffer
MQJE001: Completion Code 2, Reason 2009
MQJE001: An MQException occurred: Completion Code 2, Reason 2009
MQJE003: IO error transmitting message buffer
MQJE001: An MQException occurred: Completion Code 2, Reason 2009
MQJE003: IO error transmitting message buffer
MQJE001: Completion Code 2, Reason 2009
An MQSeries error occurred : Completion code 2 Reason code 2009
com.ibm.mq.MQException: MQJE001: Completion Code 2, Reason 2009
        at com.ibm.mq.MQQueue.put(MQQueue.java:1511)

この件に関するいくつかのスレッドを読んだ後、このエラーは通常 FDC ダンプを作成していますが、システムとキュー マネージャーのログには何もありません。チャネルは SVRCONN チャネルです。

4

1 に答える 1

1

OK、ここにはいくつかの興味深い可能性があり、非常に絞り込むのに十分な説明がないため、ショットガンアプローチを採用します。そこから行くことができます.

長い待機時間のエラーは、通常、ソケットがタイムアウトしたか、ファイアウォールまたはネットワーク ポリシーによって切断されたことを意味します。

  • アプリは、待機中に休止する場合に失敗を指定していますか?
  • クライアントと QMgr のどのバージョンですか? 一般に、古い QMgr を使用していても、新しいバージョンのクライアントの方が優れています。最良のケースは、最近のクライアント最近の QMgr です。この場合、WMQ ネイティブ プロトコル ハートビートは、TCP ハートビートよりもはるかに信頼性が高くなります。V7 とおっしゃいましたが、それは V7.0.0、V7.0.1、V7.1、または V7.5 の可能性があります。

この場合、2195 を取得するのはクライアントであるため、クライアント側でエラーが表示されると予想されます。クライアント側で 2195 が発生し、ソケットがなくなった後、QMgr は FDC ファイルをカットしません。これは、その時点でエラーを認識できないためです。クライアント側の診断により、何が起こっているのかがより明らかになる可能性があります。

  • jar ファイルを取得したか、IBM のメディアからクライアントをインストールしましたか? 完全なクライアントがある場合、トレースとローカル診断のための多くのオプションがあります。それ以外の場合は、Java トレース機能しかありません。
  • クライアント側のローカル エラー ログ ファイルまたは FDC には何が表示されますか?

QMgr 側では、2009 では通常、チャネルが切断されたことを示すメッセージが表示されますが、FDC は表示されません。ただし、QMgr は、TCP がソケットをタイムアウトするまで、チャネルが切断されたことを認識しない場合があり、ほとんどのシステムではデフォルトでその間隔が 2 時間です。したがって、ログのエラーは、接続が失われてから最大 2 時間は書き込まれない場合があります。

  • チャネルは、2 時間よりもはるかに速く応答するように調整できます。正確な調整は、前述のように、使用中の QMgr とクライアントのバージョンによって異なります。
  • これが発生した場合、孤立したチャネル インスタンスが実行されたままになっていますか? を実行するときDIS CHS(svrconn name)、アクティブなプログラムによって説明されていないエントリがありますか? わからない場合は、失敗したプログラムを専用の SVRCONN チャネルに移動します。
  • ホスト サーバーのシステム全体の TCP タイムアウトは何に設定されていますか?

前述のとおり、使用しているバージョンによって、チューニングと診断に大きな違いが生じます。これが新しい開発である場合に最初に提案することは、V7.5 クライアントを使用していることを確認することです。任意の QMgr で動作しますが、チューニングと診断は以前のバージョンよりも優れています。QMgr がそれらをサポートしていないバージョンの場合、会話の共有や先読みなどは得られませんが、純粋にクライアント側のすべての改善の利点は得られます。

于 2012-10-24T11:59:25.837 に答える