数据库的请求和答复存储中的MQ消息

时间:2018-11-13 11:47:49

标签: java ibm-mq

基于Google的多项分析,我创建了一个基于Java的MQ JMS客户端。基本上,我是MQ的新手,   毫无疑问,我创建的代码是否可以在以下“请求和答复”中正常使用。

  

请求和回复消息:

  REQUEST(SERVICE,10,CREATE_TEST,MSGID,15,FGD024049364194,TESTID,4,
USMQ,SRID,8,#MSTD,EMPID,5,8104,LOC,4,QR,AT-RP,4,QR,RTR,
7,2624931,UVT-ORD-SYS,4,CHAT,UVT-REQ,1,S,UVT-ORD,9,QT0046259,VTRD-2)RETURN();


REPLY(MSGID,15,FGD024049364194,DESTID,4,TRMQ,EMPID,5,8104,LOC,4,RTR,VTCT,0,
,UVT-DELCMNT,0,,UVT-DEL-REA,0,,UVT-DLVRY-FLG,1,N,UVT-DLVRY-STUS,1,
10,CREATE_TEST,TKT-NBR,7,2624931,USERID,8,#AMSATD)
MESSAGE(INFO,TEST-GROUP,5,PS,INFO,UVTTS,49,+00 INVALID/NORMAL,VICE,62,
00000 UPDATE SUCCESSFUL 3734931,INFO,STSUTITMEOUT,60,+0000 INVALID/OUT OF WORLD.); 

我的要求是将上述请求消息存储在oracle数据库的表中,我想   从表中读取消息,然后将其放入与其他系统(第三方)进行交互的队列中。

另一个系统将如上所述答复消息,我需要将答复消息以及消息ID存储在同一读取表中。

请澄清我的疑问并纠正我在错误的情况下需要更改的代码:

1)在“请求”中有一个味精ID,并且在“答复”中也有消息ID。在我的情况下它将如何工作   我在某个网站上读到“就像为您自动生成了一个MessgeID,您无法更改该行为”。

所以在我的情况下,如下面的代码所示,将获得什么消息ID。是否正确?

2)当我阅读消息时,我是否会完整地完成上面的“答复”消息或仅答复中提到的消息。

请澄清我的上述疑问:

Write方法的代码:

public  void write(List<Createbean> createbeanList)  throws MQException
{

    try {

        MQQueueManager qMgr = new MQQueueManager(qManager, env); 

        // Set up the options on the queue we wish to open 
        int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT;

        // Now specify the queue that we wish to open and the open options
        log.info("Accessing queue: "+qName);
        MQQueue queue = qMgr.accessQueue(qName, openOptions);

        // Define a simple WebSphere MQ Message ...
        MQMessage msg = new MQMessage();
        msg.format = MQC.MQFMT_STRING;
        msg.format = MQC.MQFMT_STRING;
        msg.feedback = MQC.MQFB_NONE;
        msg.messageType = MQC.MQMT_DATAGRAM;


        for (Createbean createBean : createbeanList) {

            String createMessage =createBean.getMessage();

            msg.writeString(createMessage);
        }


        // Specify the default put message options
        MQPutMessageOptions pmo = new MQPutMessageOptions();

        // Put the message to the queue
        queue.put(msg, pmo);

        // Close the queue
        queue.close();

        // Disconnect from the QueueManager
        // logger.debug(CLASS, methodName, "Disconnecting from the Queue
        // Manager");
        qMgr.disconnect();
        // logger.debug(CLASS, methodName, "Done!");

读取方法:

            private void read() throws MQException
            {

                int openOptions = MQC.MQOO_FAIL_IF_QUIESCING | MQC.MQOO_INPUT_SHARED | MQC.MQOO_BROWSE;  

                MQQueue queue = _queueManager.accessQueue( inputQName,
                        openOptions,
                        null, // default q manager
                        null, // no dynamic q name
                        null ); // no alternate user id

                log.info("MQRead v1.0 connected.\n");

                int depth = queue.getCurrentDepth();
                log.info("Current depth: " + depth + "\n");
                if (depth == 0)
                {
                    return;
                }

                MQGetMessageOptions getOptions = new MQGetMessageOptions();
                //getOptions.options = MQC.MQGMO_NO_WAIT + MQC.MQGMO_FAIL_IF_QUIESCING + MQC.MQGMO_CONVERT;

                getOptions.options=MQC.MQGMO_WAIT | MQC.MQGMO_BROWSE_FIRST;
                getOptions.matchOptions=MQC.MQMO_NONE;
                getOptions.waitInterval=5000;
                long messageCount = 0;
                boolean thereAreMessages=true;
                while(thereAreMessages)
                {
                    if(messageCount  >0){
                    MQMessage message = new MQMessage();
                    try
                    {
                        message.messageId     = MQC.MQMI_NONE;
                        queue.get(message, getOptions);

                        log.info("  MsgId : ");
                      String messageID=  dumpHexId(message.messageId);

                        String msg = message.readString(message.getMessageLength()); 

                        log.info("Browsed message: " + msg);
                        log.info("Actually get message?");

                        byte[] b = new byte[message.getMessageLength()];
                        message.readFully(b);

                        createDAO rmdao  = new createDAO();

                        rmdao.updateCreate(new String(b),messageID);

                        log.info(new String(b));
                        message.clearMessage();

                         /************************************************/
                           /* Reset the options to browse the next message */
                           /************************************************/
                        getOptions.options= MQC.MQGMO_WAIT | MQC.MQGMO_BROWSE_NEXT;
                    }

预先感谢

0 个答案:

没有答案