在文档中写道,您应该将阻塞代码包装到Mono
:http ://projectreactor.io/docs/core/release/reference/#faq.wrap-blocking
但它没有写如何实际做到这一点。
我有以下代码:
@PostMapping(path = "some-path", consumes = MediaType.APPLICATION_STREAM_JSON_VALUE)
public Mono<Void> doeSomething(@Valid @RequestBody Flux<Something> something) {
something.subscribe(something -> {
// some blocking operation
});
// how to return Mono<Void> here?
}
我在这里遇到的第一个问题是我需要返回一些东西,但我不能。例如,如果我会返回一个Mono.empty
请求,那么该请求将在通量工作完成之前关闭。
第二个问题是:我如何真正包装阻塞代码,就像文档中建议的那样:
Mono blockingWrapper = Mono.fromCallable(() -> {
return /* make a remote synchronous call */
});
blockingWrapper = blockingWrapper.subscribeOn(Schedulers.elastic());