我们当前正在使用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
处理。
答案 0 :(得分:0)
这将无法正常工作,因为默认情况下会向提及的KafkaListenerContainer
的{{1}}抛出异常。 LoggingErrorHandler
在那种情况下根本没有任何价值。因为没有该流程的Spring Integration发起者。
如果要处理errorChannel
错误,可以考虑使用具有.transform(transformer)
功能的ExpressionEvaluatingRequestHandlerAdvice
。
有关更多信息,请参见其JavaDocs和Reference Manual。
要将此类failureChannel
添加到流中,您需要为该Advice
添加一个lambda参数。例如:
transform()