java.util.concurrent.TimeoutException: Did not observe any item or terminal signal within 20000ms in 'flatMap' (and no fallback has been configured)
at reactor.core.publisher.FluxTimeout$TimeoutMainSubscriber.handleTimeout(FluxTimeout.java:296) ~[reactor-core-3.6.7.jar:3.6.7]
at reactor.core.publisher.FluxTimeout$TimeoutMainSubscriber.doTimeout(FluxTimeout.java:281) ~[reactor-core-3.6.7.jar:3.6.7]
at reactor.core.publisher.FluxTimeout$TimeoutTimeoutSubscriber.onNext(FluxTimeout.java:420) ~[reactor-core-3.6.7.jar:3.6.7]
at reactor.core.publisher.FluxOnErrorReturn$ReturnSubscriber.onNext(FluxOnErrorReturn.java:162) ~[reactor-core-3.6.7.jar:3.6.7]
at reactor.core.publisher.MonoDelay$MonoDelayRunnable.propagateDelay(MonoDelay.java:270) ~[reactor-core-3.6.7.jar:3.6.7]
at reactor.core.publisher.MonoDelay$MonoDelayRunnable.run(MonoDelay.java:285) ~[reactor-core-3.6.7.jar:3.6.7]
at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:68) ~[reactor-core-3.6.7.jar:3.6.7]
at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:28) ~[reactor-core-3.6.7.jar:3.6.7]
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) ~[na:na]
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ~[na:na]
at java.base/java.lang.Thread.run(Thread.java:1583) ~[na:na]
public Mono invokeXXXService(XXXRequest request) {
return webClient
.baseUrl(XXXUrl)
.build()
.post()
.contentType(MediaType.APPLICATION_JSON)
.body(BodyInserters.fromValue(request))
.exchangeToMono(clientResponse -> clientResponse.toEntity(XXXResponse.class))
.timeout(java.time.Duration.ofMillis(20000))
.onErrorResume(throwable -> {
LOG.error("Errors while getting res from XXX");
return Mono.just(ResponseEntity.status(500).body(null));
});
}
Похоже, что время ожидания запроса истекает через 20 секунд (20000 мс). У меня есть несколько вопросов:
Каковы могут быть потенциальные причины возникновения этого исключения TimeoutException в моем
веб-клиенте WebFlux?
Может помочь увеличение значения тайм-аута, но лучше, если есть лучший способ справиться с этой проблемой. Существует ли рекомендуемый подход, обеспечивающий устойчивость моего кода к таким задержкам, например, использование механизмов повтора или автоматического выключателя? Если да, то как я могу реализовать это правильно, используя возможности Reactor?
Будем признательны за любые предложения или улучшения, которые помогут более изящно справиться с этим сценарием!
Я работаю с WebClient Spring WebFlux, чтобы выполнить запрос POST, и возникла следующая ошибка: [code]java.util.concurrent.TimeoutException: Did not observe any item or terminal signal within 20000ms in 'flatMap' (and no fallback has been configured) at reactor.core.publisher.FluxTimeout$TimeoutMainSubscriber.handleTimeout(FluxTimeout.java:296) ~[reactor-core-3.6.7.jar:3.6.7] at reactor.core.publisher.FluxTimeout$TimeoutMainSubscriber.doTimeout(FluxTimeout.java:281) ~[reactor-core-3.6.7.jar:3.6.7] at reactor.core.publisher.FluxTimeout$TimeoutTimeoutSubscriber.onNext(FluxTimeout.java:420) ~[reactor-core-3.6.7.jar:3.6.7] at reactor.core.publisher.FluxOnErrorReturn$ReturnSubscriber.onNext(FluxOnErrorReturn.java:162) ~[reactor-core-3.6.7.jar:3.6.7] at reactor.core.publisher.MonoDelay$MonoDelayRunnable.propagateDelay(MonoDelay.java:270) ~[reactor-core-3.6.7.jar:3.6.7] at reactor.core.publisher.MonoDelay$MonoDelayRunnable.run(MonoDelay.java:285) ~[reactor-core-3.6.7.jar:3.6.7] at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:68) ~[reactor-core-3.6.7.jar:3.6.7] at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:28) ~[reactor-core-3.6.7.jar:3.6.7] at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) ~[na:na] at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) ~[na:na] at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[na:na] at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ~[na:na] at java.base/java.lang.Thread.run(Thread.java:1583) ~[na:na] [/code] Вот мой код: [code]public Mono invokeXXXService(XXXRequest request) {
return webClient .baseUrl(XXXUrl) .build() .post() .contentType(MediaType.APPLICATION_JSON) .body(BodyInserters.fromValue(request)) .exchangeToMono(clientResponse -> clientResponse.toEntity(XXXResponse.class)) .timeout(java.time.Duration.ofMillis(20000)) .onErrorResume(throwable -> { LOG.error("Errors while getting res from XXX"); return Mono.just(ResponseEntity.status(500).body(null)); }); } [/code] Похоже, что время ожидания запроса истекает через 20 секунд (20000 мс). У меня есть несколько вопросов: [list] [*]Каковы могут быть потенциальные причины возникновения этого исключения TimeoutException в моем веб-клиенте WebFlux? [*]Может помочь увеличение значения тайм-аута, но лучше, если есть лучший способ справиться с этой проблемой. Существует ли рекомендуемый подход, обеспечивающий устойчивость моего кода к таким задержкам, например, использование механизмов повтора или автоматического выключателя? Если да, то как я могу реализовать это правильно, используя возможности Reactor? [/list] Будем признательны за любые предложения или улучшения, которые помогут более изящно справиться с этим сценарием!
Я работаю с WebClient Spring WebFlux, чтобы выполнить запрос POST, и возникла следующая ошибка:
java.util.concurrent.TimeoutException: Did not observe any item or terminal signal within 20000ms in 'flatMap' (and no fallback has been configured)
at...