Spring 集成 | Header 使用 Java 配置丰富

Spring Integration | Header Enricher using Java Configuration

什么是 Java config 等同于以下 header enricher:-

<!-- Business Entity Header Enricher -->
<int:header-enricher 
    id="businessEntityHeaderEnricherComponent"
    should-skip-nulls="false" 
    output-channel="notificationPreferencesInputChannel"
    input-channel="newUserCreatedChannel">

    <!-- Tenant -->
    <int:header name="tenant" 
        <!-- !! HEADER ENRICHMENT ID DONE BY SPRING MANAGED BEAN !! -->
        ref="businessEntityPayloadHeaderEnricher"
        method="extractTenant" />       


</int:header-enricher>

我有一个 Spring 托管的 @Bean,它的方法(return 一个 Map)应该负责丰富消息 header。

我知道我也可以使用 spring-integration-dsl 但到目前为止我需要坚持使用 Java 配置。

例如,这就是我使用 Java 配置定义服务激活器的方式:-

    @Bean
    @ServiceActivator(requiresReply = "false", inputChannel = "lifeCycleRouterChannel")
    public InvoiceDelinquencyServiceActivator serviceActivator() {
        return new InvoiceDelinquencyServiceActivator();
    }

定义 Header Enricher 的等效方法是什么? 找不到任何 example/reference.

谢谢。

HeaderEnricher implements Transformer,所以你可以这样做:

@Bean
@Transformer(inputChannel = "enrichChannel", outputChannel = "processChannel")
public HeaderEnricher headerEnricher() {
    HeaderEnricher headerEnricher = new HeaderEnricher (...);
    ....
    return headerEnricher;
}

我有类似的需求,下面的 Groovy 代码帮助我使用 bean/method 调用添加 header。

@Bean
public HeaderEnricher authTokenHeaderEnricher() {
    new HeaderEnricher(["AUTH_TOKEN":
                                new MessageProcessingHeaderValueMessageProcessor(
                                        new BeanNameMessageProcessor<Object>('authTokenProvider', 'fetchAuthToken')
                                )
                ]
    )
}

@Bean
IntegrationFlow readyForDispatchFlow() {
    IntegrationFlows
            .from("inputChannel")
            .transform(authTokenHeaderEnricher())
            .channel("outputChannel")
            .get()
}