Могу ли я использовать hystrix для повторного вызова неудавшегося запроса? - PullRequest
0 голосов
/ 26 мая 2020

У меня есть воображаемый клиент, который каждые 60 секунд отправляет один запрос другому микросервису. На этом контроллере я использую аннотацию HystrixCommand с пользовательской конфигурацией (просто экспериментирую). У меня также есть запасной метод, в котором я go в случае сбоя запроса. Однако ожидаемые данные для меня довольно чувствительны, поэтому нет смысла отправлять пустые данные из запасного метода.

Вопрос: Как выполнить неудачный запрос еще 2-3 раза с любым интервалом? Есть ли у Hystrix такая функциональность?

Мне пришла в голову идея снова вызвать запрос в резервном методе и где-нибудь сохранить количество выполненных запросов, каждый раз сравнивая их с лимит-переменной, но мне это не нравится .

 @HystrixCommand(
            threadPoolKey = "currencyThreadPool",
            threadPoolProperties = {
                    @HystrixProperty(name = "coreSize", value = "30"),
                    @HystrixProperty(name = "maxQueueSize", value = "10")},
            commandProperties = {
                    @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value = "10"),
                    @HystrixProperty(name = "circuitBreaker.errorThresholdPercentage", value = "90"),
                    @HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds", value = "10000"),
                    @HystrixProperty(name = "metrics.rollingStats.timeInMilliseconds", value = "15000"),
                    @HystrixProperty(name = "metrics.rollingStats.numBuckets", value = "5")}
    )

1 Ответ

0 голосов
/ 01 июня 2020

В итоге я использовал библиотеку Spring Retry, которая полностью удовлетворила мои требования.

@Retryable(value = {ConnectException.class, FeignException.class}, maxAttempts = 4,
        backoff = @Backoff(delay = 5000, maxDelay = 80000, multiplier = 4))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...