您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何将消息发送到IBM MQ集群中不同队列管理器和主机名中托管的不同队列

如何将消息发送到IBM MQ集群中不同队列管理器和主机名中托管的不同队列

首先,感谢大家的支持。我的用例如下(上面也有)。

使用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队列管理器都在集群环境中。

例如

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

使用禁用自动回复disableReplyTo=true并从标头中获取队列详细信息,并使用纯javax.jms。和com.ibm.mq.jms。 api发送消息。代码如下。

@Override
public 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);

    /* producerTemplate.send("wmq:" + "queue://Different_QueueManager_in_Cluster/TEST.REPLY", exchange); */
}

对于参数,请使用@Sebastian Brandt提到的目标解析器(发布)

其他 2022/1/1 18:25:28 有567人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶