如何对反应流管道进行错误处理。喜欢
当前文档仅描述了非反应性管道的错误处理。 https://docs.spring.io/spring-cloud-stream/docs/Fishtown.BUILD-SNAPSHOT/reference/htmlsingle/#_application_error_handling
通过为错误处理方案提供简单的配置,Spring云流对用户来说非常容易。如果相同的错误处理用例(具有相同的配置)也适用于反应流管道,那就太好了。用例和相应的配置详细信息如下:
文档中的示例在spring-cloud-stream 上运行良好,但是同一件事也会导致响应式管道出错。朝这个方向的任何指导方针都将对社区有很大帮助。预先感谢!
@SpringBootApplication
@EnableBinding(Sink.class)
public class ReactiveStreamSinkApplication {
public static void main(String[] args) {
SpringApplication.run(ReactiveStreamSinkApplication.class, args);
}
@StreamListener
public void receive(@Input(Sink.INPUT) Flux<String> inputFlux) {
inputFlux.subscribe(System.out::println);
throw new RuntimeException("BOOM!");
}
@StreamListener("errorChannel")
public void error(Message<?> message) {
// log the error msg
System.out.println("Handling ERROR: " + message);
}
@KafkaListener(id="bar", topics = "reactive-stream-error-topic")
public void error(String in) {
System.out.println(in + " from DLQ");
}
}
答案 0 :(得分:0)
对不起,您的回复很晚。
首先,您的代码有问题,并且您正在处理如何从响应流中引发异常的方法。基本上,您正在处理一个声明性处理程序,该处理程序有很大不同。在您的代码中,receive
方法在启动和初始化期间仅被调用一次。因此,从中引发异常根本不等于在流处理期间引发的异常,这是您要查询的错误处理机制的设计目的。但。 。
那边。 。
由于Spring Cloud Function编程模型的引入,我们正在考虑将注意力从反应性模块转移到一起,因为Spring Cloud Function已经提供了对反应性编程模型的支持。 因此,请考虑以下几点:
@SpringBootApplication
@EnableBinding(Sink.class)
public class ReactiveStreamSinkApplication {
public static void main(String[] args) {
SpringApplication.run(ReactiveStreamSinkApplication.class,
"--spring.cloud.stream.function.definition=myconsumer");
}
@Bean
public Consumer<Flux<String>> myconsumer() {
return stream -> stream.subscribe(value -> {
if ("foo".equals(value)) {
throw new RuntimeException("BOOM!");
}
System.out.println("Received value: " + value);
});
}
@StreamListener("errorChannel")
public void error(Message<?> message) {
// log the error msg
System.out.println("Handling ERROR: " + message);
}
}
尝试一下,让我们知道。