Spring Integration DSL:handle与enrichHeaders的高效用法咨询
高效改写Spring Integration enrichHeaders避免重复调用服务的方案
你可以通过enrichHeaders的processor方法实现一次性查询服务并设置多个消息头,既贴合消息头增强的语义,又避免重复调用service.findById:
.enrichHeaders(headersSpec -> headersSpec.processor(message -> { Map<String, String> payload = message.getPayload(); String id = payload.get("id"); // 仅调用一次服务查询 var t = service.findById(id); // 基于查询结果批量设置消息头 return MessageBuilder.fromMessage(message) .setHeader("a", t.getA()) .setHeader("b", t.getB()) // 按需添加其他消息头设置 .build(); }))
方案说明
- 该写法通过
processor回调一次性完成服务查询和多消息头设置,逻辑与你原有的handle处理器完全一致,但更贴合enrichHeaders用于增强消息头的语义定位。 - 如果你原有的
handle实现已经稳定运行,继续使用也完全没问题——两种方案的执行效率基本一致,核心差异仅在于代码语义的贴合度。
内容的提问来源于stack exchange,提问作者Marc Tarin
相关产品推荐
相关产品推荐

