首先,感谢大家的支持。我的用例如下(上面也有)。
使用Apache Camel连接到MQ主机(主机名,queueManager,端口,通道),并使用属于同一主机/
Qmanager的队列中的消息。消息带有ReplyToQueue(JMSReplyTo)标头值。ReplyToQueue(JMSReplyTo)的值如下例如
queue://Different_QueueManager_in_Cluster/TEST.REPLY?mdReadEnabled=true&messageBody=0&mdWriteEnabled=true&XMSC_WMQ_REPLYTO_STYLE=1&targetClient=1
现在的问题是,当连接对象连接到上述主机和队列管理器时,如何使用不同的队列管理器将回复消息发送到不同的队列。
注意:所有MQ队列管理器都在集群环境中。
解决方案1: 例如
form(wmq:queue:INPUT_MSG_Q) .bean(requestProcessor) .bean(responseProcessor)
默认情况下,Apache
Camel处理ReplyToQ(JMSReplyTo)。如果您不想发送对ReplyToQ(JMSReplyTo)的回复,请
disableReplyTo=true在消费时使用
注意:在
queue://Different_QueueManager_in_Cluster/TEST.REPLY使用相同的连接/连接工厂发送到时,MQ集群将检查消息是否必须通过集群中的指定队列发送到指定的队列管理器。关于以下参数?mdReadEnabled=true&messageBody=0&mdWriteEnabled=true&XMSC_WMQ_REPLYTO_STYLE=1&targetClient=1,Apache
Camel能够在自动回复时自动解析,而无需使用任何第三方解析器JMSReplyTo。
解决方案2:
使用禁用自动回复
disableReplyTo=true并从标头中获取队列详细信息,并使用纯javax.jms。和com.ibm.mq.jms。
api发送消息。代码如下。
@Overridepublic void process(Exchange exchange) throws Exception { QueueConnection m_connection = this.connectionFactory.createQueueConnection(); //m_connection.start(); boolean transacted = false; QueueSession session = m_connection.createQueueSession(transacted, QueueSession.AUTO_ACKNOWLEDGE); TextMessage outMessage = session.createTextMessage(); outMessage.setText(exchange.getIn().getBody()); MQQueue mq = new MQQueue( "queue://Different_QueueManager_in_Cluster/TEST.REPLY"); QueueSender queueSender = session.createSender((MQQueue) mq); queueSender.send(outMessage); }对于参数,请使用@Sebastian Brandt提到的目标解析器(发布)



