春季集成Java DSL:如何在一次集成流程运行中共享标头变量

时间:2019-01-10 13:13:04

标签: spring-integration spring-integration-dsl

我流程的伪代码是

    @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”。

那么如何在一次集成流程运行中共享标头值?我希望仅在一个特定的集成流中共享该值,因为可以同时运行多个流。

1 个答案:

答案 0 :(得分:0)

您误解了概念; EIP方法仅对当前消息起作用;所有拆分的消息都将从父(拆分前的)消息继承值,然后每条消息将在流中稍后获得z

每条消息都有自己的标头集,这些标头是不可变的。

您可以将标头设置为可变值(例如AtomicReference<String>),但我不建议这样做,这会使调试变得非常困难。

也许您可以将某种状态存储在Bean中,而不用尝试以此方式使用消息头。