Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java .replyToQueueManagerName和replyToQueueName位于不同的MqEnvironment上_Java_Ibm Mq - Fatal编程技术网

Java .replyToQueueManagerName和replyToQueueName位于不同的MqEnvironment上

Java .replyToQueueManagerName和replyToQueueName位于不同的MqEnvironment上,java,ibm-mq,Java,Ibm Mq,如果我的replyToQueueManagerName和replyToQueueName与我的RequestQueueManageName和requestQueueName不在同一MQEnvironment中,该如何处理 例如: //MQEnvironment for requestMessage MQEnvironment.hostname = requestMessageHost; MQEnvironment.channel = requestMessageChannel; MQEnviro

如果我的replyToQueueManagerName和replyToQueueName与我的RequestQueueManageName和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中,可以连接到队列管理器和驻留在不同环境中的队列。

我假设您正在询问当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);

我假设您正在询问当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);

虽然Shashi的回答确实向您展示了如何在一个应用程序中连接到两个不同的队列管理器,但这通常不是在另一个队列管理器上处理ReplyToQ的方法。ReplyToQ/ReplyToQMgr几乎总是位于另一个队列管理器上。但是,您应该有通道和传输队列将该消息带回ReplyToQMgr,只需将应答消息放入从中获取请求消息的同一队列管理器即可

这有许多优点

您获取响应消息和放置回复消息可以在同一个MQ事务中 您不必依赖远程队列管理器的可用性来处理消息和放置回复 您的应用程序不需要知道远程队列管理器的位置,这可以由队列管理器管理员处理 以这种方式处理ReplyToQMgrs仍然是可行的,因为您从不同的队列管理器接收到更多请求,直接连接到应用程序中的每个队列管理器很快就会变得混乱,并且应用程序需要太多的网络知识。
虽然Shashi的回答确实向您展示了如何在一个应用程序中连接到两个不同的队列管理器,但这通常不是在另一个队列管理器上处理ReplyToQ的方法。ReplyToQ/ReplyToQMgr几乎总是位于另一个队列管理器上。但是,您应该有通道和传输队列将该消息带回ReplyToQMgr,只需将应答消息放入从中获取请求消息的同一队列管理器即可

这有许多优点

您获取响应消息和放置回复消息可以在同一个MQ事务中 您不必依赖远程队列管理器的可用性来处理消息和放置回复 您的应用程序不需要知道远程队列管理器的位置,这可以由队列管理器管理员处理 以这种方式处理ReplyToQMgrs仍然是可行的,因为您从不同的队列管理器接收到更多请求,直接连接到应用程序中的每个队列管理器很快就会变得混乱,并且应用程序需要太多的网络知识。
因此,如果requestQM和replyToQM驻留在两个不同的服务器/主机上,那么我只是为每个QM创建不同的哈希表?这意味着我将拥有上面的代码,两次。一次用于我的requestQM,一次用于我的replyToQM。是。在处理请求消息后,您是否尝试将回复消息路由到另一个队列管理器上的另一个队列?您为我省去了很多麻烦-谢谢。因此,如果requestQM和replyToQM位于两个不同的服务器/主机上,那么我只需为每个QM创建不同的哈希表?这意味着我将拥有上面的代码,两次。一次用于我的requestQM,一次用于我的replyToQM。是。在处理请求消息后,您是否尝试将回复消息路由到另一个队列管理器上的另一个队列?您为我省去了很多麻烦-谢谢。