为什么我的骆驼路线会尝试回复JMS消费者?

时间:2014-06-20 15:42:59

标签: jms cxf apache-camel activemq

我在Spring中配置了一个Apache Camel路由,该路由从JMS(ActiveMQ)队列接收消息,转换消息并使用CXF组件将结果发送到Web服务。这一切都运行良好,但我总是在路径的末尾抛出异常,CXF响应对象不可同步,指的是它正在尝试将交换/消息体转换回JMS消息。但为什么呢?

这是我的骆驼背景提取: -

<route>
  <from uri="jms:queue:transactions" />
  <process ref="convertToFormatForCXF" />
  <to uri="cxf:bean:myService?defaultOperationName=process" />
  <stop />
</route>

这是日志中的一个片段: -

EndpointMessageListener        WARN  Execution of JMS message listener failed. Caused by: [org.apache.camel.RuntimeCamelException - java.lang.RuntimeException: net.sophis.soa.dataexchange.LogoutResponse]
org.apache.camel.RuntimeCamelException: java.lang.RuntimeException: net.sophis.soa.dataexchange.LogoutResponse
at org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException(ObjectHelper.java:1363)
at org.apache.camel.component.jms.EndpointMessageListener.onMessage(EndpointMessageListener.java:124)

即使不阻止堆栈跟踪。现在我发现如果我将disableReplyTo = true添加到JMS使用者那么堆栈跟踪不会显示哪个是优秀的。

我想我只是想弄清楚发生了什么?是否将CXF响应对象添加到“事务”JMS队列中?我的目的是在CXF制作人完成后停止流程。

有人可以帮我理解吗? Camel文档对此没什么帮助。

1 个答案:

答案 0 :(得分:2)

  

CXF响应对象是否会被添加到&#39;交易&#39; JMS队列?

没有。它本来会被添加到临时队列中。

来自http://camel.apache.org/jms.html#JMS-Request-replyoverJMS

  

JmsProducer检测InOut并提供带有要使用的回复目标的JMSReplyTo标头。默认情况下,Camel使用临时队列,但您可以使用端点上的replyTo选项指定固定的回复队列(请参阅下面有关固定回复队列的详细信息)。   Camel将自动设置一个消费者,该消费者会在回复队列中进行监听,因此您不应该做任何事情。