我遇到了一个带有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>
答案 0 :(得分:2)
嗯,在没有至少一些日志的情况下吞下异常并不好。
对于您的任务,您可以将ExpressionEvaluatingRequestHandlerAdvice
与failureChannel
和trapException = 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中的更多信息。