如何使用Reactor framework 2.x捕获/检测多线程映射中的异常/ reduce?

时间:2015-01-16 02:24:06

标签: java multithreading concurrency mapreduce reactor

我正在使用this answer的代码,它运作顺畅。 但是,如果抛出异常,则调用者代码不会捕获它。

如何在reactor 2.0流中捕获异常? 我想要做的是:如果抛出异常,则必须停止流处理。我需要在调用者线程(首先创建了蒸汽的线程)中抛出异常。

List<Map<String, Object>> data = readData(); 

Streams.from(data)
       .flatMap(m -> Streams.just(m)
                            .dispatchOn(Environment.cachedDispatcher()) 
                            .map(ignored -> {throw new RuntimeException("kaboom!");}))
       .buffer() 
       .consume(s -> System.out.println("s: " + s)); 
// the exception is not thrown and there is not opportunity to deal with it.

1 个答案:

答案 0 :(得分:0)

在Reactor中,您只需要包装异常并将其返回为Flux.error()

然后,您可以使用onErrorXXX方法(例如onErrorResume)处理它们

查看更多:

https://projectreactor.io/docs/core/release/reference/#error.handling