Spring 集成 Java DSL:如何在一个集成流中共享 header 变量 运行

Spring integration Java DSL: How to share header variable inside one integration flow run

我的流程伪代码是

    @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))
}

首先将 header "x" 设置为值 "y"。然后消息被拆分,对于第一条消息,header 被设置为值 "z"。当第二条消息到达处理程序 myHandler 的方法 doMyWork 时,header "x" 的值为 "y"。我希望该值为 "z".

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

你误解了这些概念; EIP 方法只对当前消息进行操作;所有拆分消息都将继承 parent (pre-split) 消息的值,然后每条消息将在流程的后面获得 z

每条消息都有自己的一组 header,它们是不可变的。

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

也许您可以在 bean 中存储一些状态,而不是尝试以这种方式使用消息 headers。