Camel:消息的处理副本/保存原始消息

时间:2015-07-08 18:48:59

标签: apache-camel

通常,我想将消息发送到另一个路由来处理它,但我不希望为后续步骤修改消息。最好的方法是什么?

例如,我想使用sendMail路由发送一封电子邮件,该邮件会删除额外的标题以确保安全,但我需要保留主要路径其余部分的标题。

我目前提出的最佳方法是使用伪造的第二条路由(因为默认聚合策略是UseLatestAggregationStrategy):

<from uri="direct:sendEmail"/>
<multicast>
  <pipeline>
    <removeHeaders pattern="*" excludePattern="(?i)to|cc|bcc|from|subject"/>
    <to ref="mailServer"/>
  </pipeline>

  <transform>
    <description>noop route so that multicast returns original message</description>
    <simple>${body}</simple>
  </transform>
</multicast>

...但这有点丑陋而且并非真正本着“多播”的精神。

我发现的另一个选项是使用异步seda端点,它将原始消息返回给生产者并处理副本,但这会引入可能并不总是需要的异步行为。

似乎必须有更好的方法?

1 个答案:

答案 0 :(得分:0)

您可以选中https://camel.465427.n5.nabble.com/Keep-original-message-several-quot-steps-quot-back-td475187.html

基本上,您可以使用exchange.getUnitOfWork().getOriginalInMessage();来获取原始消息