【问题标题】:Why does my camel route try to reply to the JMS consumer?为什么我的骆驼路线会尝试回复 JMS 消费者?
【发布时间】:2014-08-11 10:24:36
【问题描述】:

我在 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>

这是来自日志的 sn-p:-

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 文档对此没有太大帮助。

【问题讨论】:

    标签: jms cxf apache-camel activemq


    【解决方案1】:

    是否将 CXF 响应对象添加到“事务”JMS 队列中?

    没有。它会被添加到一个临时队列中。

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

    JmsProducer 检测 InOut 并提供 JMSReplyTo 标头以及要使用的回复目标。默认情况下,Camel 使用一个临时队列,但您可以使用端点上的 replyTo 选项来指定一个固定的回复队列(有关固定回复队列的更多信息,请参见下文)。 Camel 会自动设置一个消费者来监听回复队列,所以你不应该做任何事情。

    【讨论】:

      猜你喜欢
      • 2013-05-23
      • 2015-08-27
      • 2022-12-13
      • 2013-06-03
      • 1970-01-01
      • 1970-01-01
      • 2012-12-01
      • 1970-01-01
      相关资源
      最近更新 更多