当前位置: 首页 > 知识库问答 >
问题:

Spring集成DSL:handle与enrichHeaders

华季同
2023-03-14

我有一个集成流程,其中我使用处理程序向我的消息添加一些标题:

...
.handle(this, "enrichTaskHeaders")
...

public Message<?> enrichTaskHeaders(Map<String, String> payload) {
    var id = payload.get("id");
    var t = service.findById(id);

    return MessageBuilder.withPayload(payload).setHeader("a", t.getA())
                                              .setHeader("b", t.getB())
                                              .setHeader(...)
                         .build();
}

它工作得很好,但因为它是关于丰富标题的,我想知道是否可以使用一个enrichHeaders方法来做同样的事情。我最接近的是:

.enrichHeaders(consumer -> consumer.headerFunction("a",
        (Message<Map<String, String>> m) -> {
            var id = m.getPayload().get("id");
            var t = service.findById(id);
            return t.getA();})
                                   .headerFunction("b",
        (Message<Map<String, String>> m) -> {
            var id = m.getPayload().get("id");
            var t = service.findById(i));
            return t.getB();})

        ...
)

它按预期工作,但显然效率低下,因为我为添加的每个标头复制了一个服务调用。有没有办法有效地重写它,或者我应该使用处理程序?

共有1个答案

徐子石
2023-03-14

参见丰富(消费者

            .enrich(e -> e
                        .<Map<String, String>>requestPayload(m -> "v")
                        .headerFunction("a", m -> m.getPayload().getA())
                        .headerFunction("b", m -> m.getPayload().getB()))

在文档中查看更多信息:https://docs.spring.io/spring-integration/docs/current/reference/html/message-transformation.html#payload-enricher公司

 类似资料:
  • 我正在构建一个小微服务来访问来自SFTP文件服务器的文件。我决定使用Spring Integration SFTP完成这项工作。我对Spring Integration很陌生,对它的工作原理很困惑。 我的目标是在SFTP服务器上获得一个目录中的文件列表,并将它们呈现给用户界面。从那里,用户将选择一个文件进行下载,我将使用文件名将文件从SFTP服务器流式传输到用户界面。 其次,我是否需要两个接口才能

  • 问题内容: 我已经下载并安装了Spring工具套件。现在,当我尝试在IntelliJ中创建新项目时,它在库中没有显示Spring。如何在其中获取Spring? 提前致谢! 问题答案: 在SpringSource工具套件具有无关的IntelliJ IDEA ,实际上它是一个不同的IDE(这是一个专门的Eclipse分布)。 因此,尽管下载Spring 框架 确实有意义(尽管最好通过Maven之类的构

  • 我试图向现有的Spring应用程序添加两个额外的表。一个正在数据库中创建,但另一个没有。我看不到JPA对象有任何明显的区别,我已经更新了这两个对象的DB属性。两个表之间唯一的主要区别是,一个表以双向关系映射到用户的表,另一个表只有一个方向。 以下是一些代码示例: 持久性.xml: data-context.xmlJPA声明: 产品实体: 支付实体: 用户实体: 账户实体: 产品表已创建 ,并链接到

  • 从各种文件和TUT中,我获得并学到了以下几点: > Spring HATEOAS用于在我们通过Controller或RESTendpoint返回的实体中创建链接。我们有来扩展我们的实体或包装类来包装我们的实体以创建或添加链接。有几个注释和类可供使用,例如和。 可能有一些问题我还没有探索或了解,但我只是好奇我们如何将SDR结合到HATEOAS链接构建过程中?代表…说话。 所以,我只想将我公开的RES

  • 我有一个redis集群,有主服务器、从服务器和3个哨兵服务器。主从映射到dns名称node1-redis-dev.com、node2-redis-dev.com。redis服务器版本为2.8 我在application.properties文件中包含以下内容。 但是,当我检查StringRedisTemplate时,在JedisConnectionFactory的hostName属性下,我看到的是

  • 本文向大家介绍详解spring与shiro集成,包括了详解spring与shiro集成的使用技巧和注意事项,需要的朋友参考一下 Shiro的组件都是JavaBean/POJO式的组件,所以非常容易使用Spring进行组件管理,可以非常方便的从ini配置迁移到Spring进行管理,且支持JavaSE应用及Web应用的集成。 在示例之前,需要导入shiro-spring及spring-context依