Я отправляю запрос в веб-службу через Http.outboundGateway, и я ожидаю получить ответ по одному из этих трех случаев
1- Успешный ответ [Ok]
2- Ошибка подключения [необходимо повторить попытку]
3 - возврат ответа с кодом ошибки, напр. 400 [сохранить]
я использовал advice () после опроса для повторной попытки сбоя подключения, но проблема в том, что исключение сообщения об ошибке было выдано в обоих случаях (сбой подключения, код ошибки ответа), поэтому повторная попытка была вызвана для обоих случаев
Как я могу различить их и использовать только Повторные рекомендации для сбоя соединения
.handle(
Http.outboundGateway(propertiesConfig.getURL())
......
, endpoint -> endpoint
.poller(Pollers.fixedDelay(delayBetweenRequests)
.errorChannel("errorChannel")
.taskExecutor(executor)
.receiveTimeout(timeoutDelay)
)
.advice(retryAdvice)
)
Bean создания повторных рекомендаций
@Bean("retryAdvice")
public RequestHandlerRetryAdvice maspRetryAdvice() {
Request
HandlerRetryAdvice retryAdvice = new RequestHandlerRetryAdvice();
RetryTemplate retryTemplate = new RetryTemplate();
FixedBackOffPolicy policy = new FixedBackOffPolicy();
policy.setBackOffPeriod(interval);
retryTemplate.setBackOffPolicy(policy);
SimpleRetryPolicy retryPolicy = new SimpleRetryPolicy();
retryPolicy.setMaxAttempts(nRetry);
retryTemplate.setRetryPolicy(retryPolicy);
retryAdvice.setRetryTemplate(retryTemplate);
ErrorMessageSendingRecoverer recover = new
ErrorMessageSendingRecoverer(aggregatorChannel());
handlerRetryAdvice.setRecoveryCallback(recover);
return retryAdvice;
}