【问题标题】:How to convert Spring Integration XML to Java DSL for errorChannel如何为 errorChannel 将 Spring Integration XML 转换为 Java DSL
【发布时间】:2015-06-02 21:00:19
【问题描述】:

我的应用程序中有以下 xml 配置,我想将其转换为 Java DSL。

因此,在此参考资料中,我明确定义了错误通道的名称。主要是例如原因。有了这个参考,我期望发生的是当下游进程抛出异常时,它应该通过错误通道将有效负载路由回。 Java 代码会是什么样子?

<int-jms:message-driven-channel-adapter
        id="notification" 
        connection-factory="connectionFactory"
        destination="otificationQueue" 
        channel="notificationChannel"
        error-channel="error"       
         />

<int:chain id="chainError" input-channel="error">
        <int:transformer id="transformerError" ref="errorTransformer" />
        <int-jms:outbound-channel-adapter 
            id="error"
            connection-factory="connectionFactory" 
            destination="errorQueue" />
    </int:chain>         

【问题讨论】:

    标签: spring-integration


    【解决方案1】:
        @Bean
        public IntegrationFlow jmsMessageDrivenFlow() {
            return IntegrationFlows
                    .from(Jms.messageDriverChannelAdapter(this.jmsConnectionFactory)
                            .id("notification")
                            .destination(this.notificationQueue)
                            .errorChannel(this.errorChannel))
    
                    ...
    
                    .get();
        }
    
        @Bean
        public IntegrationFlow ErrorFlow() {
            return IntegrationFlows
                    .from(this.errorChannel)
                    .transform(errorTransformer())
                    .handle(Jms.outboundAdapter(this.jmsConnectionFactory)
                            .destination(this.errorQueue), e -> e.id("error"))
                    .get();
        }
    

    编辑:

        @Bean
        public MessageChannel errorChannel() {
            return new DirectChannel();
        }
    

    并自动装配它,或将其引用为

    .errorChannel(errorChannel())
    

    【讨论】:

    • 愚蠢的问题我知道,但是 this.errorChannel 是如何定义的?您能否更新示例以反映这一点?
    • Gary 在 xml 配置中我不必为 errorChannel 定义消息通道。 DSL 是否有可能以相同的方式运行?我认为 messageDriverChannelAdapter 上的 .outputChannel 也会以同样的方式工作。
    • 使用 XML,如果输入通道不存在,我们会自动声明;用java不是那么容易。虽然您可以在错误流上使用.from(MessageChannels.direct("errors")),这将自动声明通道,但我们需要在.errorChannel(channel) 中引用真实通道。你不能在那里再次使用MessageChannels,因为它会是一个不同的频道。我们可以考虑添加.errorChannelName("errors"),但这需要更改核心框架(以及 DSL)。随意打开JIRA Issue(JavaDSL 组件),我们可以看看。
    • 我现在明白了,感谢您的帮助。你和@artem-bilan 都帮了大忙。
    猜你喜欢
    • 2020-12-19
    • 1970-01-01
    • 2016-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-09
    • 2015-12-12
    • 1970-01-01
    相关资源
    最近更新 更多