MQ経由で送信されたセグメント化されたメッセージを読み込み、エラーメッセージが表示されるクライアントを作成しました。コードワークの下には完全に罰金が、それは一度に単一のメッセージを読んで、アプリケーションは、私はオプションにMQGMO_SYNCPOINTを追加するとMQセグメント化メッセージの読み取りに関する問題
public void getMessage(){
try {
MQEnvironment.hostname = "";
MQEnvironment.channel = "";
MQEnvironment.port = ;
MQQueueManager QMgr = new MQQueueManager("MQManager");
MQGetMessageOptions gmo = new MQGetMessageOptions();
gmo.options = MQConstants.MQOO_INPUT_AS_Q_DEF|
MQConstants.MQGMO_WAIT|
MQConstants.MQGMO_ALL_SEGMENTS_AVAILABLE|
MQConstants.MQGMO_LOGICAL_ORDER;
gmo.matchOptions = MQConstants.MQMO_NONE;
gmo.waitInterval = MQConstants.MQWI_UNLIMITED;
MQMessage message = new MQMessage();
MQQueue queue = QMgr.accessQueue("QName",
gmo.options);
while(true){
queue.get(message, gmo);
int dataLength = message.getDataLength();
System.out.println(message.readStringOfCharLength(dataLength));
message.clearMessage();
}
} catch (Exception e) {
e.printStackTrace();
}
}
が、それはcom.ibm.mq.MQExceptionで失敗したかったものではありませんセグメント化されたメッセージを連結しています:MQJE001:完了コード '2'、理由 '2046'。
これがなぜ失敗するのか分かりませんが、私は少なくともこれを動作させることができれば、アプリケーション内のすべてのセグメント化されたメッセージを安全に処理してからコミットできます。
public void getMessage(){
try {
MQEnvironment.hostname = "";
MQEnvironment.channel = "";
MQEnvironment.port = ;
MQQueueManager QMgr = new MQQueueManager("MQManager");
MQGetMessageOptions gmo = new MQGetMessageOptions();
gmo.options = MQConstants.MQOO_INPUT_AS_Q_DEF|
MQConstants.MQGMO_WAIT|
MQConstants.MQGMO_ALL_SEGMENTS_AVAILABLE|
MQConstants.MQGMO_LOGICAL_ORDER|
MQConstants.MQGMO_SYNCPOINT;
gmo.matchOptions = MQConstants.MQMO_NONE;
gmo.waitInterval = MQConstants.MQWI_UNLIMITED;
MQMessage message = new MQMessage();
MQQueue queue = QMgr.accessQueue("QName",
gmo.options);
while(true){
queue.get(message, gmo);
int dataLength = message.getDataLength();
System.out.println(message.readStringOfCharLength(dataLength));
QMgr.commit();
message.clearMessage();
}
} catch (Exception e) {
e.printStackTrace();
}
}
セグメント化されたメッセージを1つのメッセージとして読み込もうとすると、 com.ibm.mq.MQException:MQJE001:完了コード '2'、理由 '2046'で失敗します。
この問題の解決に役立つものがあれば幸いです。私は本当に下のコードで何が間違っているのか分かりません。これは、分割されたメッセージを読むための私の好きな方法です。
public void getMessage(){
try {
MQEnvironment.hostname = "";
MQEnvironment.channel = "";
MQEnvironment.port = ;
MQQueueManager QMgr = new MQQueueManager("MQManager");
MQGetMessageOptions gmo = new MQGetMessageOptions();
gmo.options = MQConstants.MQOO_INPUT_AS_Q_DEF|
MQConstants.MQGMO_WAIT|
MQConstants.MQGMO_COMPLETE_MSG;
gmo.matchOptions = MQConstants.MQMO_NONE;
gmo.waitInterval = MQConstants.MQWI_UNLIMITED;
MQMessage message = new MQMessage();
MQQueue queue = QMgr.accessQueue("QName",
gmo.options);
while(true){
queue.get(message, gmo);
int dataLength = message.getDataLength();
System.out.println(message.readStringOfCharLength(dataLength));
message.clearMessage();
}
} catch (Exception e) {
e.printStackTrace();
}
}
Tハンク、それは働いた。上記のコードでint型のopenOptions = MQOO_INPUT_AS_Q_DEFを宣言する必要があります。 –
@ RajK、あなたが私の研究に費やしてくれた時間を感謝したなら、あなたのためにこの答えを書いてください。下の矢印の下の答えの左側にある "灰色の"チェックマークをクリックして答えを示してください。それが受け入れられていることを示す緑。 – JoshMc
ちょうど答えを受け入れました。ご協力いただきありがとうございます。 –