Как реализовать механизм повтора для restTemplate - PullRequest
1 голос
/ 22 октября 2019

Я реализовал Java-метод, который вызывает внешние сервисы через Resttemplate. Кроме того, я реализовал некоторую дополнительную бизнес-логику также внутри этого метода. Как я могу реализовать механизм повтора для этих вызовов покоя. Также необходимо учитывать следующие моменты.

  1. Я не могу добавить повтор для всего метода.
  2. Лучше добавить повтор для вызовов покоя (через resttemplate).
  3. Должен быть способ отключить опции повтора для нежелательных вызовов на отдых.

Ответы [ 2 ]

1 голос
/ 22 октября 2019

Spring предоставляет механизм повтора с аннотациями @ Retry . Вы должны использовать следующую зависимость.

<dependency>
    <groupId>org.springframework.retry</groupId>
    <artifactId>spring-retry</artifactId>
    <version>1.1.5.RELEASE</version>
</dependency>

Spring предоставляет следующие аннотации.

Аннотация повторных попыток пружины

@ EnableRetry - чтобы включить пружинуПовторите попытку загрузки весной проекта

@ Retryable - чтобы указать любой метод, который будет кандидатом на повторение

@ Recover - чтобы указать запасной метод

Ниже приведен пример кода.

@Configuration
@EnableRetry
@SpringBootApplication
public class MyApplication {
}

Вы можете обратиться к полному примеру, чтобы узнать о нем больше.

https://howtodoinjava.com/spring-boot2/spring-retry-module/ https://www.baeldung.com/spring-retry https://dzone.com/articles/spring-retry-way-to-handle-failures

0 голосов
/ 22 октября 2019

Вы можете сами управлять этим, делая что-то вроде этого:

public void method() {
    RestTemplate rest = new RestTemplate();
    int retries = 0;
    boolean done = false;

    // first call 
    while (!done && retries < 5) {
        try {
            rest.exchange(..);
            done = true;
        } catch(RestClientResponseException e) {
            retries++;
            log.info("Retrying..");
        }
    }

    done = false;
    retries = 0;

    // Business logic 1

    // second call
    while (!done && retries < 5) {
        try {
            rest.exchange(..);
            done = true;
        } catch(RestClientResponseException e) {
            retries++;
            log.info("Retrying..");
        }
    }

    // Business logic 2
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...