骆驼拦截/元帅jms回复

时间:2017-12-28 14:04:53

标签: apache-camel activemq

我正在尝试在骆驼中获取请求/回复jms消费者, 收到传入的消息,我可以看到camel也发送了回复,但消息没有被封送。

我正在使用拦截器来封送来自activemq端点的所有消息

OsdrDataFormat osdrDataFormat = new OsdrDataFormat();

interceptFrom("activemq:*").unmarshal(osdrDataFormat);
interceptSendToEndpoint("activemq:*").marshal(osdrDataFormat);

(我扩展了JacksonDataFormat,因此我可以在编组消息时填充JMSType。)

对于正常的单向交换,这是有效的(例如)

from("activemq:queue:test").bean(TestComponent.class, "test");
from("direct:test-input").to("activemq:queue:test");

但是当我使用这条路线时

from("activemq:queue:test").bean(TestComponent.class, "test");

并将带有JMSReplyTo消息的消息发送到测试队列(使用activemq管理页面)我可以看到camel确实发送了回复消息,但它没有封送到json。

手动添加marshal确实有效,但我更喜欢使用拦截器,这样我就可以创建一个抽象的RouteBuilder并默认将拦截器添加到每个路径。

from("activemq:queue:test").bean(TestComponent.class, "test").marshal(osdrDataFormat);

有谁知道解决这个问题的方法?或者可能是一种更好的方法来确保来自activemq的所有消息都被封送?

我也找到了这个帖子:Apache Camel inOut routes, out exchange marshaling/unmarshaling with jaxb 但这里的答案是使用手动编组。

1 个答案:

答案 0 :(得分:0)

interceptSendToEndpoint仅在Camel向Camel端点发送消息时 - 而不是在JMS组件内部向某个JMS目标发送一些JMS消息时。它不一样。