`

基于WebSphere MQ的JAVA请求回复实例

阅读更多

        Requester.java将消息发送到本地的远程发送队列,然后从本地队列中读取响应消息,Response.java从本地队列(此本地队列和Requester.java中的远程队列对应)中获取消息,判断消息的类型如果是MQMT_REQUEST消息,就往远程队列(此远程队列和Requester.java中的本地队列对应)中发送回复消息。

        先运行Requester.java,并在Requester.java获取消息超时之前运行Response.java。否则,Requester.java会抛出如下异常。

MQJE001: 完成代码为 '2',原因为 '2033'。
An MQ Error Occurred: Completion Code is :t2nn The Reason Code is :t2033
com.ibm.mq.MQException: MQJE001: 完成代码为 '2',原因为 '2033'。
	at com.ibm.mq.MQDestination.getInt(MQDestination.java:647)
	at com.ibm.mq.MQDestination.get(MQDestination.java:456)
	at com.bijian.study.Requester.main(Requester.java:68)

Requester.java

package com.bijian.study;

import com.ibm.mq.*;

public class Requester {

    public static void main(String args[]) {
        
        try {
            String hostName = "10.38.25.205";
            int port = 1418;
            String channel = "DC.SVRCONN";
            String qManager = "M01";
            String requestQueue = "REMOTEQ";
            String replyToQueue = "LOCALQ";
            String replyToQueueManager = "M01";
            // Set up the MQEnvironment properties for Client Connections
            MQEnvironment.hostname = hostName;
            MQEnvironment.channel = channel;
            MQEnvironment.port = port;
            MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES);
            MQEnvironment.CCSID = 1381;

            // Connection To the Queue Manager
            MQQueueManager qMgr = new MQQueueManager(qManager);

            int openOptions = MQC.MQOO_OUTPUT | MQC.MQOO_FAIL_IF_QUIESCING;

            // Open the queue
            MQQueue queue = qMgr.accessQueue(requestQueue, openOptions, null, null, null);
            // Set the put message options , we will use the default setting.
            MQPutMessageOptions pmo = new MQPutMessageOptions();
            pmo.options = pmo.options + MQC.MQPMO_NEW_MSG_ID;
            pmo.options = pmo.options + MQC.MQPMO_SYNCPOINT;
            MQMessage outMsg = new MQMessage();
            // Create the message buffer
            outMsg.format = MQC.MQFMT_STRING;

            // Set the MQMD format field.
            outMsg.messageFlags = MQC.MQMT_REQUEST;
            outMsg.replyToQueueName = replyToQueue;
            outMsg.replyToQueueManagerName = replyToQueueManager;
            // Prepare message with user data
            String msgString = "Test Request Message from Requester program ";
            outMsg.writeString(msgString);
            // Now we put The message on the Queue
            queue.put(outMsg, pmo);
            // Commit the transaction.
            qMgr.commit();
            System.out.println(" The message has been Sussesfully putnn#########");
            // Close the the Request Queue

            queue.close();
            // Set openOption for response queue
            openOptions = MQC.MQOO_INPUT_SHARED | MQC.MQOO_FAIL_IF_QUIESCING;
            MQQueue respQueue = qMgr.accessQueue(replyToQueue, openOptions, null, null, null);
            MQMessage respMessage = new MQMessage();
            MQGetMessageOptions gmo = new MQGetMessageOptions();
            gmo.options = gmo.options + MQC.MQGMO_SYNCPOINT;
            // Get messages under syncpoint control
            gmo.options = gmo.options + MQC.MQGMO_WAIT;
            // Wait for Response Message
            gmo.matchOptions = MQC.MQMO_MATCH_CORREL_ID;
            gmo.waitInterval = 10000;
            respMessage.correlationId = outMsg.messageId;
            System.out.println("The response message correlID : " + respMessage.correlationId);
            // Get the response message.
            respQueue.get(respMessage, gmo);
            String response = respMessage.readString(respMessage.getMessageLength());
            System.out.println("The response message is : " + response);
            qMgr.commit();
            respQueue.close();
            qMgr.disconnect();
        } catch (MQException ex) {
            System.out.println("An MQ Error Occurred: Completion Code is :t" + ex.completionCode
                    + "nn The Reason Code is :t" + ex.reasonCode);
            ex.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Response.java

package com.bijian.study;

import com.ibm.mq.*;

public class Response {
    
    public static void main(String args[]) {
        
        try {
            String hostName = "10.38.66.58";
            int port = 1414;
            String channel = "DC.SVRCONN";
            String qManager = "M02";
            String qName = "LOCALQ";
            String replyToQueue = "REMOTEQ";
            String replyToQueueManager = "M02";
            
            // Set up the MQEnvironment properties for Client
            // Connections
            MQEnvironment.hostname = hostName;
            MQEnvironment.port = port;
            MQEnvironment.channel = channel;
            MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES);
            MQEnvironment.CCSID = 1381;
            // Connection To the Queue Manager
            MQQueueManager qMgr = new MQQueueManager(qManager);
            
            /*
            * Set up the open options to open the queue for out put and
            * additionally we have set the option to fail if the queue manager
            * is quiescing.
            */
            int openOptions = MQC.MQOO_INPUT_SHARED | MQC.MQOO_FAIL_IF_QUIESCING;
            // Open the queue
            MQQueue queue = qMgr.accessQueue(qName, openOptions, null, null, null);
            // Set the put message options.
            MQGetMessageOptions gmo = new MQGetMessageOptions();
            gmo.options = gmo.options + MQC.MQGMO_SYNCPOINT;
            // Get messages under syncpoint control
            gmo.options = gmo.options + MQC.MQGMO_WAIT;
            // Wait if no messages on the Queue

            gmo.options = gmo.options + MQC.MQGMO_FAIL_IF_QUIESCING;
            // Fail if QeueManager Quiescing
            gmo.waitInterval = 3000;
            // Sets the time limit for the wait.
            /*
            * Next we Build a message The MQMessage class encapsulates the data
            * buffer that contains the actual message data, together with all
            * the MQMD parameters that describe the message.
            * To
            * Build a new message, create a new instance of MQMessage class and
            * use writxxx (we will be using writeString method). The put()
            * method of MQQueue also takes an instance of the
            * MQPutMessageOptions class as a parameter.
            */

            MQMessage inMsg = new MQMessage();
            
            // Create the message buffer Get the message from the queue on to the message buffer.
            queue.get(inMsg, gmo);
            // Read the User data from the message.
            String msgString = inMsg.readString(inMsg.getMessageLength());
            System.out.println(" The Message from the Queue is : " + msgString);
            // Check if message if of type request message and reply to the
            // request.
            if (inMsg.messageFlags == MQC.MQMT_REQUEST) {
                System.out.println("Preparing To Reply To the Request ");
                String replyQueueName = replyToQueue;
                openOptions = MQC.MQOO_OUTPUT | MQC.MQOO_FAIL_IF_QUIESCING;
                MQQueue respQueue = qMgr.accessQueue(replyQueueName, openOptions, replyToQueueManager, null, //inMsg.replyToQueueManagerName, null,
                        null);
                MQMessage respMessage = new MQMessage();
                respMessage.correlationId = inMsg.messageId;
                System.out.println("The response CorrelID " + respMessage.correlationId);
                MQPutMessageOptions pmo = new MQPutMessageOptions();
                respMessage.format = MQC.MQFMT_STRING;
                respMessage.messageFlags = MQC.MQMT_REPLY;
                String response = "Reply from the Responder Program ";
                respMessage.writeString(response);
                respQueue.put(respMessage, pmo);
                System.out.println("The response Successfully send ");
                qMgr.commit();
                respQueue.close();
            }
            queue.close();
            qMgr.disconnect();
        } catch (MQException ex) {
            System.out.println("An MQ Error Occurred: Completion Code is :t" + ex.completionCode
                    + "nn The Reason Code is :t" + ex.reasonCode);
            ex.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

参考文章:http://www.cnblogs.com/windows/archive/2012/09/25/2701620.html

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics