MQ сообщение в хранилище запросов и ответов в базе данных - PullRequest
0 голосов
/ 13 ноября 2018

Основываясь на множественном анализе через Google, я создал JMS-клиент на основе Java. В основном я новичок в 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, и я хочу прочитайте сообщение из таблицы и поместите в очередь, которая будет взаимодействовать с другой системой (третьей стороной).

Другая система ответит на сообщение, как указано выше, и мне нужно сохранить ответное сообщение вместе с идентификатором сообщения в той же таблице чтения.

Пожалуйста, проясните мои сомнения и исправьте меня, что мне нужно изменить в коде в случае ошибки:

1) В запросе есть идентификатор MSG, а в ответе - идентификатор сообщения. Как это будет работать в моем сценарии Я читал на каком-то сайте "как MessgeID автоматически генерируется для вас, и вы не можете изменить это поведение".

поэтому в моем сценарии, как в приведенном ниже коде, какой идентификатор сообщения будет получен. Это правильно?

2) Когда я читаю сообщение, я получаю завершенное ответное сообщение или только сообщение, указанное в ответе.

Пожалуйста, проясните мои сомнения:

код для метода записи:

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

Заранее спасибо

...