Spring Cloud Stream Kafka“ errorChannel”标头

时间:2019-06-28 16:48:35

标签: spring-integration spring-kafka spring-cloud-stream

我们当前正在使用Spring Cloud Stream提供SET transfer=%%transfer:~1%%& xcopy /y "C:\source_location" "D:\target_location" 作为输入,提供SubscribableChannel作为输出,并且我们使用Spring Integration在两个Kafka主题之间提供业务逻辑。在其他Spring Integration应用程序中,我们使用了MessageChannel头来动态提供错误处理通道(例如,当发生某些更改时需要更改错误通道,而该错误需要回滚到错误中)。 / p>

但是,Spring Cloud Stream提供的输入通道似乎不符合errorChannel标头。有没有办法启用此功能?

示例代码(请原谅错别字-从另一台机器上抄袭的手)

errorChannel
public interface TestStreams {
     @Input
    SubscribableChannel input();

    @Output
    MessageChannel output();
}

上面的代码正常运行,但是当转换器引发异常时,错误由@SpringBootApplication @EnableBinding(TestSTreams.class) public class TestService { public static void main(String[] args) { SpringApplication.run(TestProcessorMicroservice.class, args); } @Bean public IntegrationFlow buildProcessingFlow(TestStreams streams, TransformerThatThrowsException transformer) { return IntegrationFlows.from(streams.input()) .enrichHeaders(ImmutableMap.of(MessageHeaders.ERROR_CHANNEL, "errorChannel") .transform(transformer) .channel(streams.output()) .get(); } @Bean public IntegrationFlow buildErrorFlow() { return IntegrationFlows.from("errorChannel") .handle(new MyErrorHandler()) .get(); } } 处理,而不是路由到org.springframework.kafka.listener.LoggingErrorHandler并最终由errorChannel处理。

1 个答案:

答案 0 :(得分:0)

这将无法正常工作,因为默认情况下会向提及的KafkaListenerContainer的{​​{1}}抛出异常。 LoggingErrorHandler在那种情况下根本没有任何价值。因为没有该流程的Spring Integration发起者。

如果要处理errorChannel错误,可以考虑使用具有.transform(transformer)功能的ExpressionEvaluatingRequestHandlerAdvice

有关更多信息,请参见其JavaDocs和Reference Manual

要将此类failureChannel添加到流中,您需要为该Advice添加一个lambda参数。例如:

transform()
相关问题