当前位置: 首页 > 知识库问答 >
问题:

驼峰截获/封送jms回复

赫连彬炳
2023-03-14

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

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

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。

手动添加封送确实有效,但我更喜欢使用拦截器,因为这样可以创建一个抽象的RouteBuilder,并在默认情况下将拦截器添加到每个路由。

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

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

我还发现了这个线程:Apache Camel inOut路由,使用jaxb进行交换封送/解封送,但这里的答案是使用手动封送。

共有1个答案

施赞
2023-03-14

只有当Camel将消息发送到Camelendpoint时,才出现截取发送到endpoint的情况,而不是当JMS组件内部将一些JMS消息发送到某个JMS目标时。这不一样。

 类似资料:
  • 我试图通过驼峰路由将消息放到Weblogic JMS中的队列中。 我的目标是最终配置一个Route以使用来自jms队列的消息,我将早期Route的数据发布到该队列。 这是我的配置: 我的路线如下所示: 我尝试执行此路由时遇到此异常: 我按照以下过程创建了此处提到的队列:https://blogs.oracle.com/soaproactive/entry/how_to_create_a_simpl

  • 我对骆驼很陌生,如果这很明显,请原谅。 我们正在尝试设置一条骆驼路线(在 talend esb 中),它执行以下操作: < li >通过JMS接收消息 < li >数据库更新 < li >通过JMS使用请求/回复将消息发送到另一个系统 < li >使用回复中的信息进行另一次数据库更新 这一切都在一条路线上。我发现该路由不再接受 1 中的任何消息。当它正在等待 3 中的回复时。 我曾尝试在JMS组件

  • 我有两个使用JMS作为传输的CXFendpoint;一个用作消费者,另一个用作生产者。这是一个非常精简的设置。 但是当调用第二个路由时会发生什么,CXF组件或camel会尝试重用来自原始入站消息(包括回复队列)的所有JMS配置,而不是仅为此交换创建另一个临时回复队列。这似乎是从in消息中获取的标头。 如果您只使用纯JMS并将CXF从等式中去掉,那么camel会正确地为路由的内部创建一个新队列,尽管

  • 关于ApacheCamel的简短问题。我有以下场景,其中我的服务器接收jms消息,然后转换为csv文件,然后插入DB。为此,我有两个bean: xml2csv 我使用路由像: 当"路由"一个文件从-到,它是移动像一个消息?或者把问题放在不同的地方,ApacheCamel是否获取一个文件,将其包装为消息,并将其路由到bean或组件? 我的理解是正确的还是错误的。

  • 如果这是个愚蠢的问题,请原谅。骆驼洞对我来说是新鲜事,所以我真的没有“全球视野”。我喜欢在camel安装中使用队列。我发现ActiveMQ是一个解决方案,然后偶然发现了两个不同的组件(或uri):ActiveMQ和JMS。 由于ActiveMQ正在实现JMS 1.1,使用这两种URI有什么区别?或者换句话说:我可以同时使用这两种方法吗?如果可以,在哪些情况下应该使用哪一种?

  • 我正在用Spring boot为Camel编写一个测试。下面是测试类的配置 我认为骆驼不应该被启动。但当我运行测试时,它已经开始了。 我注意到CamelSpringBootRunner确实在CamelSpringBootExecutionListener中启动了camel上下文。 如何强制不启动骆驼上下文。