spring-integration - Spring集成Java 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”。
那么如何在一个集成流运行中共享标头值呢?我希望该值仅在一个特定的集成流中共享,因为可以同时运行多个流。
解决方案
您误解了这些概念;EIP方法只对当前消息进行操作;所有拆分消息都将继承父(拆分前)消息的值,然后每个消息将z
在流中稍后获得。
每条消息都有自己的一组标头,这些标头是不可变的。
您可以使标头成为可变值(例如AtomicReference<String>
)-但我不建议这样做,这会使调试变得非常困难。
也许您可以在 bean 中存储一些状态,而不是尝试以这种方式使用消息头。
推荐阅读
- javascript - 在 node.js 中提供 HTML 文件
- java - 忽略依赖项中的实体持久性
- java - 如何使用拦截器在 CORBA 中操作发送到远程对象的参数
- c# - 如何合并两个表达式
- python - Plotly-Dash:想要两个堆叠的条形图从单个 df 列并排
- android-source - 为 Hikey970 构建 AOSP 时出错
- sql - 我想更改应用程序清单文件上的数据库服务器
- javascript - 如何使用正则表达式从字符串中删除以 www.*** 开头的 url?
- sql - 将包括数字在内的数据从 Excel 导入 SQL DB
- middleman-4 - 带有中间人的 yml 文件中的新段落