骆驼拦截/元帅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回复的主要内容,如果未能解决你的问题,请参考以下文章

阿帕奇骆驼和跺脚

骆驼 - 使用 end()

使用 JMS/ActiveMQ 并发同步请求-回复 - 模式/库?

将消息从 HTTP 端点发送到 JMS

opc-ua milo项目的骆驼路线

骆驼路由输入端点的 JBoss 嵌入式 MQ 的 jndi 查找问题