Spring Integration:PublishSubscribe子流间Header更新未生效问题
PublishSubscribe 子流Header更新不生效问题解析
PublishSubscribeChannel的设计逻辑是给每个订阅的子流分发原始消息的独立副本,所以你在SubFlow1里修改Header,只会改变当前子流持有的消息副本的Header,SubFlow2拿到的还是最初的消息副本,自然看不到SubFlow1的更新——哪怕两个子流在同一主线程执行也是如此,因为副本是完全独立的。
解决思路:
- 如果要让所有子流都用更新后的Header,把Header修改操作放到PublishSubscribeChannel之前的主流程里,这样所有子流拿到的副本都会包含这个更新。示例代码:
.updateHeader("target-header", newHeaderValue) .publishSubscribeChannel(pubSubSpec -> pubSubSpec.subscribe(flow1()) .subscribe(flow2())) .get();
- 如果必须在SubFlow1修改后让SubFlow2使用更新后的值,那得放弃PublishSubscribe的并行分发,改成顺序执行两个子流,这样SubFlow2能拿到SubFlow1修改后的消息。示例代码:
.flow(flow1()) .flow(flow2()) .get();
- 另外也可以把需要传递的更新值放到消息Payload里,而非Header,这样子流间可以通过Payload共享数据;或者用ThreadLocal存储共享值(同一主线程下安全可行)。
内容的提问来源于stack exchange,提问作者Rayyan
相关产品推荐
相关产品推荐

