Spring集成ErrorChannel问题

时间:2018-02-20 13:36:32

标签: spring spring-integration spring-kafka mapr-streams

我遇到了一个带有maprstream的spring integration错误通道的问题。

如果在正常流程中发生任何异常,我已经创建了自己的错误通道来执行几个步骤。 但是如果 sendMessageToMaprstream 流中有任何异常,我不希望调用错误通道。因为我希望它作为一个单独的线程运行。

     <int:chain input-channel="errorChannel">
        <int:transformer ref="transformExcep" method="transform"/>
        <int:service-activator ref="dosomeTask"/>
        <int:recipient-list-router>
                <int:recipient channel="sendMessageToMaprstream"/>
        </int:recipient-list-router>
    </int:chain>

    <task:executor id="executor" pool-size="10" />
    <int:publish-subscribe-channel id="sendMessageToMaprstream" task-executor="executor"/>      

    <int-kafka:outbound-channel-adapter 
       id="kafkaOutboundChannelAdapter"
       channel="sendMessageToMaprstream"
       kafka-template="template"
       topic="${maprstream.topicname}"
       message-key-expression="'exp'">                                 
   </int-kafka:outbound-channel-adapter>

使用上述配置,如果 sendMessageToMaprstream 中存在任何异常,则错误通道将作为无限循环执行。 有人可以帮我跳过 sendMessageToMaprstream 中的错误吗?

更新了部分:

                 <int-kafka:outbound-channel-adapter 
                                id="kafkaOutboundChannelAdapter"
                                channel="sendMessageToMaprstream"
                                kafka-template="template"
                                topic="${maprstream.topicname}"
                                message-key-expression="'exp'"> 
                                    <int-kafka:request-handler-advice-chain>
                                      <bean class="org.springframework.integration.handler.advice.ExpressionEvaluatingRequestHandlerAdvice">
                                       <property name="failureChannel" ref="nullChannel"/>
                                       <property name="trapException" value="true"/>
                                      </bean>
                                   </int-kafka:request-handler-advice-chain>
                        </int-kafka:outbound-channel-adapter>

1 个答案:

答案 0 :(得分:2)

嗯,在没有至少一些日志的情况下吞下异常并不好。

对于您的任务,您可以将ExpressionEvaluatingRequestHandlerAdvicefailureChanneltrapException = true选项一起使用:

<int-kafka:request-handler-advice-chain>
        <bean class="org.springframework.integration.handler.advice.ExpressionEvaluatingRequestHandlerAdvice">
            <property name="failureChannel" ref=" sendMessageToMaprstreamErrors"/>
        </bean>
            <property name="onFailureExpression" value="#root"/>
            <property name="trapException" value="true"/>
    </int-kafka:request-handler-advice-chain>

查看Reference Manual中的更多信息。