我使用spring-camel构建了一条路由,该路由从JMS主题使用(期望为每个输入消息设置JMSReplyTo),将消息拆分为较小的块,将其发送到REST进程,然后汇总答案并应产生向JMSReplyTo指向的目标的输出消息。不幸的是,骆驼在中间步骤之一(产生未编组的POJO)中隐式地利用了JMSReplyTo目标。

我们具有适应JMSReplyTo的功能需求,以便提供请求-回复消息服务。
我能够在结束路由之前读取JMSReplyTo标头,并且可以将其显式转换为CamelJmsDestinationName,它成功覆盖了JMS组件的目标并在输出主题上生成了消息。我不确定这是否是最好的方法,问题是骆驼仍然独自使用JMSReplyTo。

我的RouteBuilder配置如下:

from("jms:topic:T.INPUT")
.process(requestProcessor)
.unmarshal().json(JsonLibrary.Jackson, MyRequest.class)
.split(messageSplitter)
.process(restProcessor)
.aggregate(messagesAggregator)
.unmarshal().json(JsonLibrary.Jackson, BulkResponses.class)
.process(responseProcessor)
.to("jms:topic:recipientTopic");


T.INPUT是输入主题的名称,而accepterTopic只是一个占位符,将由CamelJmsDestinationName代替。

我不热衷于在路由配置中使用CamelJmsDestinationName和某种模拟主题名称,因此我愿意寻找更好的解决方案。如果骆驼自动利用JMSReplyTo产生输出消息到输出主题,那就太好了。

当前,问题在于骆驼在JMSReplyTo主题上产生中间输出,但输出是未编组的MyRequest对象,这会导致说“ ClassNotFoundException :(程序包名称).MyRequest”的异常,这很明显,因为这只是一个类在内部处理中使用-我不想在输出主题中使用它。好像Camel确实在requestProcessor和messageSplitter处理之间隐式使用了JMSReplyTo目标...为什么?我究竟做错了什么?最佳做法是什么?

最佳答案

在端点中使用“ disableReplyTo = true”。骆驼不会尝试使用任何回复选项。

有关更多详细信息,请参考:https://camel.apache.org/jms.html

10-06 15:32