java - 如何在Spring集成DSL中根据消息id丰富消息头?

标签 java spring-integration spring-integration-dsl

我的集成流程如下所示:

@Bean
public IntegrationFlow integrationFlow() {
    return IntegrationFlows.from(Http.inboundGateway("/spring_integration_post")
            .requestMapping(m -> m.methods(HttpMethod.POST))
            .requestPayloadType(String.class))
            .enrich(enricherSpec -> {
                enricherSpec.header("correlationId", 1); //or ackCorrelationId ?
            })
            .split(s -> s.applySequence(false).get().getT2().setDelimiters(","))
            .log()
            .log()
            .handle(Amqp.outboundAdapter(amqpTemplate())
                    .exchangeName("barrierExchange")
                    .routingKey("barrierKey"))
            .get();
}

正如你所看到的,我在这里有丰富的内容:

.enrich(enricherSpec -> {
                    enricherSpec.header("correlationId", 1);
})

目前,它添加了带有常量值1的 header correlationId。但我想复制 messageId (id) correlationId。我不知道如何使用 DSL 来实现它。

我找到了有效的 xml 替代方案:

  <int:header-enricher input-channel="receiveChannel" output-channel="processChannel">
        <int:header name="ackCorrelation" expression="headers['id']" />
    </int:header-enricher>

如何使用 java DSL 执行相同操作?

最佳答案

你为什么不读一下the documentation - Configuring a Header Enricher with the Java DSL和javadocs,而不是在这里继续问问题。你会取得更快的进步。

我们没有时间继续回答文档中已经涵盖的琐碎问题;我们的时间最好花在改进框架上。

文档中的示例:

@Bean
public IntegrationFlow enrichHeadersInFlow() {
    return f -> f
                ...
                .enrichHeaders(h -> h.header("emailUrl", this.emailUrl)
                                     .headerExpression("from", "payload.from[0].toString()"))
                .handle(...);
}

在您的情况下enricherSpec.headerExpression("ackCorrelation", "headers['id']")

关于java - 如何在Spring集成DSL中根据消息id丰富消息头?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57704709/

相关文章:

spring-integration - Spring Integration DSL 中 ConsumerEndpointSpec.transactional() 的使用

java - 如何使用struts 1.3为一个独特的表单设置多个 Action ?

java - tomcat 服务器中的性能问题 Sqlite

jbpm - Spring集成和JBoss jBPM有什么区别?

stored-procedures - 如何将输入参数值动态更改为存储过程入站 channel 适配器

java - Spring Integration动态流线程问题

java - Ant 和带注释的 junit 测试

java - 将 .dll 添加到 java 构建路径

java - 在 Spring Integration 中使用 Transformer 轮询 HTTP 服务(出站网关)和进程

spring-boot - Spring Integration DSL 添加中流事务