Продолжайте звонить третьим лицам, пока он не вернет ожидаемый ответ с Hystrix - PullRequest
0 голосов
/ 13 января 2020

Я ищу способ вызова сторонней службы из своего кода (приложение Spring Boot), и в случае, если он не отвечает, я хотел бы повторить вызов x количество раз, а затем предоставить откат по умолчанию. Я нашел пример псевдокода, который, вероятно, работал бы в моем случае с Hystrix

public class ExampleClass {

    @HystrixCommand(fallbackMethod = "example_Fallback")
    public String myMethod() {

        // third party service
        String response = httpClient.execute();

        return "OK";
    }

    private String example_Fallback() {

        return "ERROR HAPPENED";
    }
}

Однако я также хотел бы повторить вызов той же сторонней службе x количество раз, если она возвращает нормальный ответ, который неожиданный (обработайте указанный конкретный ответ c, как будто третье лицо не отвечает). Причина этого заключается в том, что третья сторона может быть не в состоянии обработать запрос, и я могу проверить это только в ответе. Может ли кто-нибудь указать мне правильное направление или привести пример, как это можно решить с помощью Hystrix?

1 Ответ

0 голосов
/ 13 января 2020

... Я хотел бы повторить вызов x несколько раз, а затем предоставить запасной вариант по умолчанию.

Здесь может помочь настройка circuitBreaker.requestVolumeThreshold. Взгляните и на другие свойства Hystrix .

@HystrixCommand(fallbackMethod = "example_Fallback", commandProperties = {
   @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value = "5"),
   @HystrixProperty(name = "metrics.rollingStats.timeInMilliseconds", value = "2000")
   }
)
public String myMethod() {
  ...
}

Обратите внимание, что circuitBreaker.requestVolumeThreshold (quote) "... устанавливает минимальное количество запросов в скользящем окне, которое будет отключить цепь ". Длительность скользящего окна - metrics.rollingStats.timeInMilliseconds - по умолчанию составляет 10 секунд.

Существует также аннотация @Retryable весной.

...