【问题标题】:Spring Integration | Header Enricher using Java Configuration弹簧集成 |使用 Java 配置的 Header Enricher
【发布时间】:2015-04-24 14:11:26
【问题描述】:

什么是 Java 配置 相当于以下标头丰富器:-

<!-- 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,其方法(返回 Map)应该负责丰富 Message 标头。

我知道我也可以使用 spring-integration-dsl,但现在我需要坚持 Java 配置。

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

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

定义 Header Enricher 的等效方法是什么? 找不到任何示例/参考。

谢谢。

【问题讨论】:

    标签: java spring spring-integration


    【解决方案1】:

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

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

    【讨论】:

    • 示例中的 Header 丰富 bean (businessEntityPayloadHeaderEnricher) 是如何出现在这里的。我如何告诉 HeaderEnricher 在我的 bean 中使用方法?
    • HeaderEnricher 具有 setMessageProcessor 因此您可以从该接口实现包装您的 bean 调用,例如MethodInvokingMessageProcessor
    • 那行得通。但是现在我决定回到 XML 配置,因为 Java 配置正在使我的业务代码与 Spring Integration 的类相结合 - 可能只是我的看法..
    • 如果您的设计可能会出现问题...您可以有多个 @Configuration 类来解耦。例如ExpressionEvaluatingMessageProcessor for HeaderEnricher @Bean 允许您不将集成@Configuration 与您的业务组件@Configuration 绑定。
    【解决方案2】:

    我也有类似的需求,下面的 Groovy 代码帮助我使用 bean/方法调用添加标头。

    @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()
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-09
      • 2011-09-11
      • 2019-09-26
      • 2018-04-08
      • 1970-01-01
      相关资源
      最近更新 更多