通常,我想将消息发送到另一个路由来处理它,但我不希望为后续步骤修改消息。最好的方法是什么?
例如,我想使用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端点,它将原始消息返回给生产者并处理副本,但这会引入可能并不总是需要的异步行为。
似乎必须有更好的方法?
答案 0 :(得分:0)
您可以选中https://camel.465427.n5.nabble.com/Keep-original-message-several-quot-steps-quot-back-td475187.html
基本上,您可以使用exchange.getUnitOfWork().getOriginalInMessage();
来获取原始消息