我流程的伪代码是
@Bean
private IntegrationFlow myChannel() {
return f -> f
.enrichHeaders(h -> h.header("x", "y", true))
.split(...)
...
..handle("myHandler", "doMyWork")
...
.enrichHeaders(h -> h.header("x", "z", true))
}
首先将标题“ x”设置为值“ y”。然后拆分消息,并为第一个消息将标头设置为值“ z”。当第二条消息到达处理程序doMyWork
的方法myHandler
时,标头“ x”的值为“ y”。我希望该值为“ z”。
那么如何在一次集成流程运行中共享标头值?我希望仅在一个特定的集成流中共享该值,因为可以同时运行多个流。
答案 0 :(得分:0)
您误解了概念; EIP方法仅对当前消息起作用;所有拆分的消息都将从父(拆分前的)消息继承值,然后每条消息将在流中稍后获得z
。
每条消息都有自己的标头集,这些标头是不可变的。
您可以将标头设置为可变值(例如AtomicReference<String>
),但我不建议这样做,这会使调试变得非常困难。
也许您可以将某种状态存储在Bean中,而不用尝试以此方式使用消息头。