如何在Apache Camel Multicast路由中设置Header并传递给Audit Bean
问题分析与解决方案
你的Apache Camel路由配置中,multicast组件默认会为每个子端点复制一份原始Exchange,这意味着你在multicast内直接设置的Header无法正确传递给对应的audit端点——因为每个子节点拿到的都是初始Exchange的副本,后续的Header修改不会影响其他分支,甚至当前分支的修改也可能因为Exchange复制机制不生效。
修正后的路由配置
<route id="SUB2I0051"> <from uri="seda:SUB2-I0051MTMapper"/> <multicast> <!-- 第一个分支:文件输出 + 审计 --> <pipeline> <to uri="file:C:/complexTest/?fileName=MT_Output.txt" /> <setHeader name="Node"> <simple>File1</simple> </setHeader> <to uri="audit:File1?level=info"/> </pipeline> <!-- 第二个分支:文件输出 + 审计 --> <pipeline> <to uri="file:C:/complexTest/?fileName=MTY_Output.txt" /> <setHeader name="Node"> <simple>File2</simple> </setHeader> <to uri="audit:File1?level=info"/> </pipeline> </multicast> </route>
关键说明
- 使用
<pipeline>将每个分支的逻辑(文件输出、Header设置、审计)包裹起来,每个pipeline会使用独立的Exchange副本,Header的修改会被限定在当前分支内,确保传递给后续的audit端点。 multicast的每个子节点现在是完整的pipeline,分支间的Exchange修改互不干扰,符合你为不同文件输出设置对应审计Header的需求。
内容的提问来源于stack exchange,提问作者Ravi Kishore
相关产品推荐
相关产品推荐

