Spring Flux и аннотация Async

Возможно, вы захотите проверить Binky Pointer fun , это видео, которое иллюстрирует, что такое Указатели и ссылки.

0
задан Jonathan Naguin 18 March 2019 в 17:37
поделиться

2 ответа

Если вы ищете реализацию шаблона «забей и забудь» , вы можете просто подписать своего издателя

@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();
}

Если ваш издатель выполняет операции блокировки, он должен быть подписан на другие резьба с упругим или параллельным планировщиком.

0
ответ дан Alexander Pankin 18 March 2019 в 17:37
поделиться

Я провел некоторое тестирование, и я думаю, что даже используя 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);
}
0
ответ дан Frischling 18 March 2019 в 17:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: