Spring 5和WebFlux会给你带来最大的好处,因为框架本身使用的是反应式编程,并且是完全非阻塞的,如果你的数据库也是异步的,就会有机会出现端到端的异步性(想想Cassandra ,Redis,MongoDB,Couchbase以及反应式Spring Data Kay)。
也就是说,即使您的应用程序没有完全反应,类似Reactor的库也可以带来好处。例如,如果您有一个需要大量编排的服务层。如果这些服务将任务表示为异步类型(理想情况下为Flux
/Mono
/Publisher
,而且Future
),则可以将它们桥接到Reactor并使用强大的运算符来构建复杂的异步处理管道。
最后一部分是让Spring 4.x使用这些异步结果。框架有一个DeferredResult<T>
类型的支持形式,你可以从Flux
或Mono
获得(下面的例子是简单的,并没有显示我上面提到的操作符的组成,它将隐藏在服务中):
@GetMapping()
public DeferredResult<User> getCurrentUser() {
DeferredResult<User> result = new DeferredResult();
Mono<User> mono = myService.getCurrentUser();
mono.subscribe(
value -> result.setResult(value),
error -> result.setErrorResult(error)
);
return result;
}