java - 访问 Camel 中的初始交换消息

标签 java integration apache-camel

大家好,当我需要对 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>

基本上我想要实现的是:

  1. 从 request1 消息队列中抓取消息
  2. 从中创建 TIN VALIDATION 消息
  3. 向交换机发送 TIN VALIDATION 消息
  4. 等待开关响应
  5. 使用第 4 步中的交换机响应和初始请求 1 XML 消息,创建 CREATE TIN 消息
  6. 向交换机发送消息(来自第 5 步)
  7. 根据交换机的响应创建响应 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/

相关文章:

java - Gzip apache Camel 请求休息

java - Camel Jetty 中的自定义基本身份验证

java - JSP:在mysql查询中执行非英文字符

java - SPRING MVC - 如何获取表单:input path from JSP to Controller的值

web-services - 从 CQRS 访问 Web 服务

php - 如何将 vBulletin 身份验证与我的站点集成?

spring - 使用 Java 配置时,Camel 的 BridgePropertyPlaceholderConfigurer 不工作

java - 了解修改流的后备集合的副作用

java - JSF 2.0 DataTable 类组件

jms - 将 websphere MQ 与 boomi 集成