备份骆驼身体

时间:2018-06-18 05:58:00

标签: java apache-camel

我试图在Apache Camel中实现以下路线: 端点1接收消息。该路由向端点2发起请求(清除正文)。 Transformer通过使用Endpoint 2的结果转换Body of Endpoint 1 incomming Message。

enter image description here

我试过以下:

from("direct:MessageEndpoint1")
  .setHeader(Exchange.HTTP_METHOD, constant("GET"))
  .to("http://localhost:9003/MessageEndpoint2")
  .process(new MessageTransformationProcessor())
  .to("direct:MessageEndpoint3");

问题是,该主体被消息端点2覆盖。我正在考虑将消息体备份到属性中。但最佳做法是什么?

1 个答案:

答案 0 :(得分:1)

您应该使用的企业集成模式是enricher

请参阅:http://camel.apache.org/content-enricher.html

正确识别后,当您发送消息to消息端点2时,消息端点1中的正文将丢失。

相反,你应该尝试这种模式:

from("direct:MessageEndpoint1")
  .setHeader(Exchange.HTTP_METHOD, constant("GET"))
  .enrich("http://localhost:9003/MessageEndpoint2", new AggregationStrategy() {
    @Override
    public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
      // write an aggregation strategy that makes sense here...
    }
  })
  .process(new MessageTransformationProcessor())
  .to("direct:MessageEndpoint3");

通常,您可以在newExchange的回复中获取所需的信息,并将其设置为oldExchage上的属性

oldExchange.setProperty("xyz", newExchange.getIn().getBody().get(...));