我将“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
答案 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。