[解決済み] MQJE001: IBM Only For Getting Some Messagesの完了コード「2」、理由「2033」問題
質問事項
現在、リモートキューから読み込んでいますが、このキューはトランザクション(メッセージ)で満たされています。キューにアクセスし、レコードのサイズを計測することで読み込んでいます。
getOptions.options = MQC.MQGMO_CONVERT + MQC.MQGMO_WAIT;
queue.getCurrentDepth();
キューのサイズが0より大きいときだけ、メッセージを取得するように進みます。
私の問題は、いくつかのメッセージについて、次のようなエラーが発生することです。 MQJE001: 完了コード '2'、理由 '2033'。
しかし、いくつかのメッセージに対してのみ、おかしなことに、私はカスタム再試行変数を持っており、3回目の再試行は空白のメッセージを取得します。
私の考えられる解決策
最初はwaitIntervalのせいかと思い、150msから30秒まで変化させています。いくつかのメッセージでは、100ミリ秒以下で正しく表示されるようになりました。しかし、私に問題を与えるメッセージは、すべてのwaitIntervalを取り、そしてエラーを与え、3回目の再試行に空白のメッセージを取得します。
2つ目のテストは、MQMessageクラスのパラメータを確認することで、私はもともと持っています。
- messageType: 8
- のエンコーディングになります。273
- 形式を使用します。
- 文字セットです。0
正しくメッセージが表示されると、以下のパラメータが残ります。
- messageType: 8
- のエンコーディングになります。273
- 形式を使用します。MQSTR
- 文字セット: 819
3回目のリトライでエラー2033が発生するメッセージがある場合、空白のメッセージが表示され、パラメータが以下のように変化します。
- messageType: 8
- のエンコーディングになります。273
- 形式を使用します。
- 文字セット: 819
キューにあるメッセージが正しいフォーマットを示していないと思うようになりました。そこで、サポートに連絡したところ、すべてのメッセージに正しい変換ヘッダーがあることを確認しました。
なぜこのような問題が起こるのか、まだ疑問です。もし同じようなことに直面した方がいらっしゃいましたら、コメントをお願いします。ありがとうございました。
解決方法を教えてください。
IBM MQをデータベースとして扱っているので、いろいろと面倒なことになります。
メッセージの取得はこのように行う必要があります。
MQGetMessageOptions gmo = new MQGetMessageOptions();
gmo.options = CMQC.MQGMO_WAIT + CMQC.MQGMO_FAIL_IF_QUIESCING;
gmo.waitInterval = 5000; // wait up to 5 seconds
MQMessage receiveMsg = null;
boolean getMore = true;
while(getMore)
{
receiveMsg = new MQMessage();
try
{
// get the message on the queue
queue.get(receiveMsg, gmo);
/*
* Now go do something with the message
*/
}
catch (MQException e)
{
if ( (e.completionCode == CMQC.MQCC_FAILED) &&
(e.reasonCode == CMQC.MQRC_NO_MSG_AVAILABLE) )
{
// No message - loop again
}
else
{
System.out.println("MQException: " + e.getLocalizedMessage());
System.out.println("CC=" + e.completionCode + " : RC=" + e.reasonCode);
getMore = false;
}
}
catch (IOException e)
{
System.out.println("IOException:" +e.getLocalizedMessage());
}
}
関連
-
[解決済み】popBackStack()とreplace()の操作はどう違うのですか?
-
[解決済み】不正なエスケープ文字"㊧"について
-
[解決済み】"比較メソッドはその一般契約に違反する!"
-
[解決済み】「java -cp」と「java -jar」の違い?
-
[解決済み】Javaを使用するSelenium - ドライバの実行ファイルのパスは、webdriver.gecko.driverシステムプロパティで設定する必要があります。
-
[解決済み】Javaで文字列をコピーするにはどうしたらいいですか?
-
[解決済み] [Solved] java.lang.NoClassDefFoundError: クラスXXXを初期化できませんでした。
-
[解決済み】CreateProcess error=2, The system cannot find file specified.
-
[解決済み] Eclipseが起動できない - Javaは起動したが終了コード=13を返した
-
[解決済み] build.gradle ファイルにローカルの .jar ファイルの依存関係を追加するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】代入の左手は必ず変数 CharAt
-
[解決済み】StringUtils.isBlank() vs String.isEmpty()
-
[解決済み】不正な反射的アクセスとは?
-
[解決済み】スレッド「main」での例外 java.lang.StringIndexOutOfBoundsException: 文字列のインデックスが範囲外です。0 [閉店]
-
[解決済み】ResultSetの例外 - 結果セットの開始前
-
[解決済み】Eclipseがエラーメッセージ "Java was started but returned exit code = 1" を返す
-
[解決済み】Javaで無限大を実装する方法とは?
-
[解決済み】「java -cp」と「java -jar」の違い?
-
[解決済み】intがnullであるかどうかを確認する方法
-
[解決済み】CreateProcess error=2, The system cannot find file specified.