不同MqEnvironment上的.replyToQueueManagerName和replyToQueueName

时间:2014-11-25 20:27:12

标签: java ibm-mq

如果我的replyToQueueManagerName和replyToQueueName与requestQueueuManagerName和requestQueueName不在同一个MQEnvironment中,我该怎么办?

示例:

//MQEnvironment for requestMessage
MQEnvironment.hostname = requestMessageHost;
MQEnvironment.channel = requestMessageChannel;
MQEnvironment.port = requestMessagePort

MQQueueManager qMgr = new MQQueueManager(requestQueueuManagerName);

MQQueue inputQueue = qMgr.accessQueue(requestQueueName,MQC.MQOO_OUTPUT);

MQMessage requestMessage = new MQMessage();
MQPutMessageOptions pmo = new MQPutMessageOptions();

requestMessage.writeString(sampleXmlRequest);
requestMessage.replyToQueueManagerName = replyToQueueManagerName;
requestMessage.replyToQueueName = replyToQueueName; 

在VB.NET中,可以连接到驻留在不同环境中的QueueManagers和Queues。

2 个答案:

答案 0 :(得分:3)

我假设您在MQEnvironment已用于连接到队列管理器时询问如何连接到另一个队列管理器。

您可以通过哈希表提供连接信息来创建与队列管理器的连接。这段代码在C#中。

       Hashtable mqProps = new Hashtable();
       mqProps.Add(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_MANAGED);
       mqProps.Add(MQC.HOST_NAME_PROPERTY, "<yourhost>");
       mqProps.Add(MQC.PORT_PROPERTY, port);
       mqProps.Add(MQC.CHANNEL_PROPERTY, "<svrconn channel name>");

       MQQueueManager qmConn = new MQQueueManager("replyQM", mqProps);

这是Java代码:

      Hashtable<String, Object> properties;
      properties = new Hashtable<String, Object>();
      properties.put("hostname", "replyqmhost");
      properties.put("port", new Integer(1414));
      properties.put("channel", "REPLYQM.SVRCONN");
      properties.put(MQConstants.USE_MQCSP_AUTHENTICATION_PROPERTY,true);
      properties.put(MQConstants.USER_ID_PROPERTY, "<user id>");
      properties.put(MQConstants.PASSWORD_PROPERTY, "<password>");

      /**
        * Connect to a queue manager 
        */
      MQQueueManager queueManager = new MQQueueManager("replyQM", properties);

答案 1 :(得分:3)

虽然Shashi的答案确实告诉您如何在一个应用程序中连接到两个不同的队列管理器,但这通常不是在另一个队列管理器上处理ReplyToQ的方法。几乎总是会出现ReplyToQ / ReplyToQMgr在另一个队列管理器上的情况。但是你应该有通道和传输队列来将该消息带回ReplyToQMgr,并且只需将回复消息放到你从中获取请求消息的同一个队列管理器中。

这有很多好处

  • 您获取响应消息并发送回复消息可以在同一个MQ事务中
  • 您没有依赖远程队列管理器的可用性来处理消息并发送回复
  • 您的应用程序不需要知道远程队列管理器的位置,这可以由队列管理器管理员处理
  • 以这种方式处理ReplyToQMgrs也是可行的,因为您从不同的队列管理器获取更多请求,直接连接到应用程序中的每个请求将很快变得混乱,并且您的应用程序需要太多的网络知识。 / LI>