大家好,当我需要对 XML 请求进行“复合”处理时,我会遇到以下情况。这是我的 Spring 路线定义的片段:
<route id="request1">
<from uri="activemq:request1" />
<unmarshal ref="integrationServerJaxb" />
<bean ref="createTINValidationMessage" />
<bean ref="switchComponent" />
<bean ref="createCreateTINMessage" />
<bean ref="switchComponent" />
<bean ref="createResponse1" />
<marshal ref="integrationServerJaxb" />
</route>
基本上我想要实现的是:
- 从 request1 消息队列中抓取消息
- 从中创建 TIN VALIDATION 消息
- 向交换机发送 TIN VALIDATION 消息
- 等待开关响应
- 使用第 4 步中的交换机响应和初始请求 1 XML 消息,创建 CREATE TIN 消息
- 向交换机发送消息(来自第 5 步)
- 根据交换机的响应创建响应 XML(来自第 6 步)
换句话说,我需要在处理过程中获取初始消息。在 CreateCreateTINMessage bean 中,我可以将方法参数更改为 Message 类型,然后它将映射到实际的 Camel 消息(尽管来自上一步),而不是交换中的第一条消息。检查消息的交换,我可以使用 request1 xml 负载跟踪初始 JMS 消息,但深入到这个程度似乎并不正确。我的问题是,是否可以以某种方式与路由中的中间结果和初始消息进行集成?谢谢。
最佳答案
当然,只需将其显式保留在交换属性(或消息 header )中...
from(...)
.setProperty("ORIG_EXCH",body())
...
.process(new Processor() {
public void process(Exchange exch) throws Exception {
Object orig = exch.getProperty("ORIG_EXCH");
...
}
})
...
或者您可以使用此 API 从您的 route 检索它...
exchange.getUnitOfWork().getOriginalInMessage();
关于java - 访问 Camel 中的初始交换消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9577801/