1. 程式人生 > >Java 接收IBM mq佇列訊息

Java 接收IBM mq佇列訊息

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();
                }
            }
        }
    }