Spring Integration: Ошибка соединения против кода ответа об ошибке retryadvice () - PullRequest
0 голосов
/ 14 мая 2018

Я отправляю запрос в веб-службу через 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;
} 

1 Ответ

0 голосов
/ 04 июня 2018

Я столкнулся почти с той же проблемой. Для времени ожидания соединения эта ссылка предоставляет точное решение: [Настройте обработку ошибок и повторите попытку для Http.outboundGateway spring dsl ] [1]: Настройте обработку ошибок и повторите попытку для пружины Http.outboundGateway dsl

.... .handle (Http.outboundGateway ( парсер (). parseExpression ( "заголовки [URL]"))

                    .httpMethod(HttpMethod.POST)
                    .headerMapper(headerMapper())

                    .expectedResponseType(String.class)
                    .requestFactory(clientHttpRequestFactory())

                    // The inner writer method is doing nothing, just place holder for future usage, 
                    // errorHandler is necessary to capture :
                    // e.g. org.springframework.web.client.HttpClientErrorException: 403 Forbidden
                    .errorHandler(responseErrorFileWriter())
                    , (Consumer<GenericEndpointSpec>)e -> e.advice(retryAdvice()))
...