Полный асинхронный пример WebClient с Spring WebfluxJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Полный асинхронный пример WebClient с Spring Webflux

Сообщение Anonymous »

Я новичок в парадигме реактивного программирования, но в последнее время я решил основать простой HTTP -клиент на весеннем веб -клиенте, так как старый Sync Resttemplate уже находится под техническим обслуживанием и может быть устарел в навигающих выпусках. ( только на данный момент ) я сознательно решил не проходить документацию по реактору LIB, поэтому за пределами шаблона издателя-подписчика, мои знания о моно и потоке скудны. Вместо этого я сосредоточился на том, чтобы что -то работало. Тело не возвращается. Итак, я наконец придумал этот фрагмент кода, который работает: < /p>

Код: Выделить всё

private void notifyJobSuccess(final InternalJobData jobData) {

SuccessResult result = new SuccessResult();
result.setJobId(jobData.getJobId());
result.setStatus(Status.SUCCESS);
result.setInstanceId(jobData.getInstanceId());

log.info("Result to send back:" + System.lineSeparator() + "{}", result.toString());

this.webClient.post()
.uri(jobData.getCallbackUrl())
.body(Mono.just(result), ReplaySuccessResult.class)
.retrieve()
.onStatus(s -> s.equals(HttpStatus.OK), resp -> {
log.info("Expected CCDM response received with HttpStatus = {}", HttpStatus.OK);
return Mono.empty();
})
.onStatus(HttpStatus::is4xxClientError, resp -> {
log.error("CCDM response received with unexpected Client Error HttpStatus {}. "
+ "The POST request sent by EDA2 stub did not match CCDM OpenApi spec", resp.statusCode());
return Mono.empty();
})
.onStatus(HttpStatus::is5xxServerError, resp -> {
log.error("CCDM response received with unexpected Server Error HttpStatus {}", resp.statusCode());
return Mono.empty();
}).bodyToMono(Void.class).subscribe(Eda2StubHttpClient::handleResponseFromCcdm);

}
< /code>
Мое плохое понимание того, как работает реактивный WebClient, начинается с вызова подписки. Ни один из десятков примеров, которые я проверил до кодирования моего клиента, не включал такой вызов, но факт, что прежде чем я включил этот вызов, сервер сидел вечно, ожидая запроса. Knowing the pattern Plublisher-Subscriber I knew that, but I (wrongly) assumed that the subscription was handled by WebClient API, in any of the exchage, or bodyToMono methods... block() definitely must subscribe, because when you block it, the request gets out at once.
So my first question is: is this call to subscribe() really needed?
Second question Вот почему метод stubhttpclient :: gandlerSponse никогда не вызывает обратно. Для этого единственное объяснение, которое я нахожу, состоит в том, что по мере возвращения моно - это моно  
, потому что в ответе нет ничего, кроме кода состояния, поскольку он никогда не создается, метод совершенно фиктивен ... Я даже мог бы заменить его просто. Subscribe (). Это правильное предположение. Все примеры, которые я нахожу, просто сосредоточены на получении запроса, но то, как моно или поток, позже потребляемый, теперь не подходит мне, я знаю, что я должен в конечном итоге проверять реакторного доктора раньше, чем позже, но я был бы признателен за небольшую помощь, потому что у меня возникают проблемы с исключениями и ошибками.
>

Подробнее здесь: https://stackoverflow.com/questions/679 ... ng-webflux
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»