骆驼拦截/元帅jms回复
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了骆驼拦截/元帅jms回复相关的知识,希望对你有一定的参考价值。
我试图在camel中获取请求/回复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,但这里的答案是使用手动编组。
答案
interceptSendToEndpoint
仅在Camel向Camel端点发送消息时 - 而不是在JMS组件内部向某个JMS目标发送一些JMS消息时。这是不一样的。
以上是关于骆驼拦截/元帅jms回复的主要内容,如果未能解决你的问题,请参考以下文章