Java 接收IBM mq佇列訊息
阿新 • • 發佈:2019-02-02
void getConnectInfo() throws MQException { if(qMgr==null){ getInfo(); MQEnvironment.hostname = hostname;//主機IP MQEnvironment.channel = channel;//連線通道名字 MQEnvironment.port = port; //監聽埠 MQEnvironment.CCSID = CCSID; //傳輸的編碼型別 qMgr = new MQQueueManager(QueueManager); //佇列管理器 } }
獲取java連線mq的資訊
void receiveMsg() {
int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT | MQC.MQOO_INQUIRE;
MQQueue queue = null;
try {
queue = qMgr.accessQueue(queueString, openOptions, null, null, null);//queueString 為要讀取遠端佇列的佇列名稱
int depth = queue.getCurrentDepth();
log.info("該隊列當前的深度為:" + depth); //當前Mq佇列訊息的大小
while (depth-- > 0) {
MQMessage msg = new MQMessage();// 要讀的佇列的訊息
MQGetMessageOptions gmo = new MQGetMessageOptions();
try{
queue.get(msg, gmo);
}catch(MQException e){
log.info("{}",e);
}
int dataLength = msg.getDataLength();
log.info("訊息的大小為:{}" , dataLength);
String strXml = msg.readStringOfByteLength(dataLength);
log.info("訊息的內容:{}" , strXml); //我在連線的時候出現了2033的異常,原因是遠端佇列有多個應用程式在讀取訊息,未讀的佇列訊息被其他應用讀取造成的。
}
} catch (Exception e) {
log.info("獲取佇列訊息失敗:{}" , e);
} finally {
if (queue != null) {
try {
queue.close();
} catch (MQException e) {
log.info("獲取佇列訊息失敗:{}" , e);
e.printStackTrace();
}
}
}
}