1. 概述
在Reactor 系列视频中,我们学习了Mono。Mono是T对象的发布者。今天,我们要讲阻塞和非阻塞两种方式来获取Mono流里面的T对象
2. 阻塞方式
让我们从一个发布者Mono的例子开始。
在这里,只要发布者不再推送数据,我们就可以执行block方法获取Mono里面的值。
我们设置了一个时间让它更好的控制:
assertEquals(expected, result);
如果发布者没有在设定的持续时间内发出一个值,就会抛出一个RuntimeException。此外,Mono也可能是空的,block()方法将返回null。在这种情况下,我们可以使用blockOptional来代替。
assertEquals(Optional.empty(), result);
一般情况下,block违背了响应式编程的原则。在响应式应用中,不鼓励执行block方法。
接着我们来看非阻塞方式
3.非阻塞
首先,我们应该使用 subscribe()方法以非阻塞的方式进行订阅:
为了更好的呈现消费过程。可以使用以下方式:
blockingHelloWorld()
.doOnNext(result -> assertEquals(expected, result))
.subscribe();
4. 结论
这短文,我们写了两种方式获取Mono中的T值。强烈建议使用非阻塞方式。