我正在尝试在骆驼中获取请求/回复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 但这里的答案是使用手动编组。
答案 0 :(得分:0)
interceptSendToEndpoint
仅在Camel向Camel端点发送消息时 - 而不是在JMS组件内部向某个JMS目标发送一些JMS消息时。它不一样。