发送给Websphere MQ的消息未收到回复(Fuse ESB 7.1)

时间:2013-12-02 13:00:27

标签: java jms apache-camel ibm-mq fuseesb

我将“RequestSnapshot”发送到Websphere-MQ队列,该队列由供应商定义为“S”(同步) - 因此我希望通过Apache Camel inOut集成模式接收回复,在Fuse ESB中运行。

from("direct:" + SEND_SUBSCRIPTION)
        .routeId(getFinalRouteName(SEND_SUBSCRIPTION))
        .log("Sending Request Snapshot request to webspheremq")
        .bean(CreateSnapshotRequest.class)
        .marshal(myDataFormat)
        .convertBodyTo(String.class)
        .inOut("webspheremq:queue:SNAPSHOT_REQUESTS.HT")   // **1** works, but no Reply!!
        .log("RequestSnapshot response: ${body}")          // doesnt reach this line

我知道快照请求消息是正确传输的,因为在我发送快照请求消息后,我收到了关于不同MQ主题的数据。

问题是我没有收到回复,执行在标记为**1**的行上停止 - 并且在20秒后我得到超时。

org.apache.camel.ExchangeTimedOutException: The OUT message was not received
within: 20000 millis due reply message with correlationID:
Camel-ID-XYZ012-54037-1385986757895-0-3 not received.

通常,通过java代码,这将以不同的方式完成,但在这里我们使用Fuse ESB并且inOut机制应该发送消息并获得对所谓的{{1}的回复}。

我对“回复”队列的理解有些限制,我只是理解Fuse ESB应该监听某种临时mq的响应,但这应该通过DYNAMIC REPLY-TO QUEUE透明地工作。

这是inOut的配置bean:

blueprint.xml

我脑海中的另一个问题是防火墙端口,我们要求打开1417和1499,但只有1417似乎是开放的。另外我不知道防火墙端口是否在相反的方向打开,从WebsphereMQ回到我身边。

如果有人能提供任何建议,我将非常感激!

修改1:

我尝试了克劳斯的<bean id="webspheremq" class="org.apache.camel.component.jms.JmsComponent"> <property name="connectionFactory"> <bean class="com.ibm.mq.jms.MQConnectionFactory"> <property name="transportType" value="1"/> <property name="hostName" value="1.2.3.4"/> <property name="port" value="1417"/> <property name="channel" value="SOME.CHANNEL"/> <property name="temporaryModel" value="SOME_MODEL_QUEUE"/> <property name="CCSID" value="789"/> <property name="queueManager" value="SOMEGATE"/> <property name="brokerSubQueue" value="SYSTEM.JMS.ND.MACHINE.USER.*"/> <property name="brokerControlQueue" value="SOME_SUBSCRIPTION.HT"/> <property name="brokerQueueManager" value="SOMEHUB"/> <property name="tempQPrefix" value="MACHINE.USER.*"/> </bean> </property> </bean> 建议,结果是这样的:

replyTo=queue:XYZ

1 个答案:

答案 0 :(得分:0)

您也可以使用命名回复队列。也许这对WMQ更好。因此,在Camel端点uri中,您只需将replyTo = queue:foobar设置为使用名为foobar的队列作为回复队列。

这会将JMSReplyTo标头设置为foobar作为队列名称,因此&#34;另一侧&#34;将其用于回复队列,而不是临时队列名称。

有关通过JMS进行请求/回复的更多详细信息,请参阅Camel JMS文档,因为您可以配置和调整许多选项:http://camel.apache.org/jms

同样在过去,WMQ没有链接长关联ID,并且选项useMessageIDAsCorrelationID可以设置为true,以使用WMQ为请求消息生成的消息ID。否则,Camel会生成一个长随机ID。