Возможно, вы захотите проверить Binky Pointer fun , это видео, которое иллюстрирует, что такое Указатели и ссылки.
Если вы ищете реализацию шаблона «забей и забудь» , вы можете просто подписать своего издателя
@PostMapping("/create")
public Mono<Resource> create(@Valid @RequestBody Resource r) {
run(r).subscribe();
return repository.save(r);
}
Mono<Void> run(Resource r) {
WebClient webClient = WebClient.create("http://localhost:8080");
return webClient.get()
.retrieve()
.bodyToMono(String.class)
.then();
}
Если ваш издатель выполняет операции блокировки, он должен быть подписан на другие резьба с упругим или параллельным планировщиком.
Я провел некоторое тестирование, и я думаю, что даже используя subscribe()
в качестве огня и забыть, дождусь завершения запроса, прежде чем вернуть ответ веб-браузеру или REST-клиенту (по крайней мере, в моих простых тестах это выглядит так) , Итак, вы должны сделать то же самое из @Async, создать другой поток:
@PostMapping("/create")
public Mono<Resource> create(@Valid @RequestBody Resource r) {
return processor.run(r)
.subscribeOn(Schedulers.elastic()) // put eveything above this line on another thread
.doOnNext(string -> repository.save(r)); // persist "r", not changing it, though
}
И класс Processor:
Mono<String> run(Resource r) {
WebClient webClient = WebClient.create("http://localhost:8080");
return webClient.get()
.retrieve()
.bodyToMono(String.class);
}