【问题标题】:accessing initial exchange message in camel在骆驼中访问初始交换消息
【发布时间】:2012-03-23 13:59:53
【问题描述】:

大家好,当我需要对 XML 请求进行“复合”处理时,我遇到了以下情况。这是我的 spring 路线定义中的 sn-p:

        <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 消息,但深入到该深度似乎并不正确。我的问题是,是否有可能以某种方式与来自路由的中间结果和初始消息进行集成?谢谢。

【问题讨论】:

  • 最终使用 Exchange 作为方法参数并设置交换属性以便在后续处理器中进一步检索。

标签: java integration apache-camel


【解决方案1】:

当然,只需将其显式保存在交换属性(或消息头)中...

from(...)
    .setProperty("ORIG_EXCH",body()) 
    ...
    .process(new Processor() {
        public void process(Exchange exch) throws Exception {
            Object orig = exch.getProperty("ORIG_EXCH");
            ...
        }
    })
    ...

或者您可以使用此 API 从您的路线中检索它...

exchange.getUnitOfWork().getOriginalInMessage();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    相关资源
    最近更新 更多