【发布时间】:2013-12-18 04:51:07
【问题描述】:
我正在向供应商定义为“S”(同步)的 Websphere-MQ 队列发送“RequestSnapshot” - 所以我希望通过 Apache Camel inOut 集成模式收到回复,运行在保险丝 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 机制应该发送消息并获得关于所谓的DYNAMIC REPLY-TO QUEUE 的回复。
我对“回复”队列的理解有些有限,我只知道 Fuse ESB 应该监听某种临时 mq 的响应,但这应该通过 inOut 透明地工作。
这是我来自blueprint.xml的配置bean:
<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>
我想到的另一个问题是防火墙端口,我们要求打开 1417 和 1499,但似乎只有 1417 是开放的。另外我不知道防火墙端口是否在相反的方向打开,从 WebsphereMQ 回到我。
如果有人可以提供任何建议,我将非常感激!
编辑 1:
我尝试了克劳斯的replyTo=queue:XYZ建议,结果是这样的:
2013-12-03 14:38:04,636 | WARN | eplyManager[FOO] | entQueueMessageListenerContainer
| ? ? | 153 - org.springframework.jms -
3.0.7.RELEASE | Setup of JMS message listener invoker failed for destination 'FOO'
- trying to recover. Cause: MQJMS2008: failed to open MQ queue ; nested exception is
com.ibm.mq.MQException: MQJE001: Completion Code 2, Reason 2085
【问题讨论】:
标签: java jms apache-camel ibm-mq fuseesb