如何在Spring Integration DSL中基于消息ID丰富消息头?

时间:2019-08-29 07:01:13

标签: 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);
})

现在,它添加标头correlationId和常量值1。但是我想复制messageId(idcorrelationId。我不知道如何使用DSL来实现。

我发现可以使用xml替代方法:

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

如何使用Java DSL进行相同操作?

1 个答案:

答案 0 :(得分:1)

为什么您不阅读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']")