使用spring-camel,我构建了一个从JMS主题消费的路由(预计将为每个输入消息设置JMSReplyTo ),将消息拆分成较小的块,将它们发送到REST处理器,然后聚合答案,并应向JMSReplyTo指定的目的地生成输出消息。不幸的是,camel在其中一个中间步骤中隐式地利用了JMSReplyTo目的地(生成一个未编组的POJO)。
为了提供请求-应答消息传递服务,我们有一个调整JMSReplyTo的功能需求。我能够在结束路由之前读取JMS头,并显式地将其转换为CamelJmsDestinationName,这将成功覆盖JMSReplyTo组件的目的地,并在输出主题上生成消息。我不确定这是否是最好的方法,问题是camel仍然在自己使用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是输入主题的名称,而recipientTopic只是一个占位符,将被CamelJmsDestinationName替换。
我不喜欢在路由配置中使用CamelJmsDestinationName和一种模拟的主题名称,所以我愿意找到更好的解决方案。如果camel自动利用JMSReplyTo来生成输出主题的输出消息,那就太好了。
目前的问题是,camel在JMSReplyTo主题上产生一个中间输出,但输出是一个未编组的MyRequest对象,这会导致一个异常"ClassNotFoundException:(包名).MyRequest“,这很明显,因为这只是我的内部处理中使用的一个类-我不想将其生成到输出主题中。似乎Camel确实在requestProcessor和messageSplitter处理之间隐式地使用了JMSReplyTo目的地……为什么?我做错了什么?最佳实践是什么?
发布于 2019-06-04 15:05:39
在端点中使用"disableReplyTo=true“。Camel不会尝试使用任何回复选项。
有关更多细节,请参阅:https://camel.apache.org/jms.html
https://stackoverflow.com/questions/56414437
复制相似问题