Конфигурация maxSemaphores для сервера zuul

Я пытаюсь сделать нагрузочный тест на зуул version 1.1.2,

Однако я продолжаю получать следующую проблему через несколько минут для запуска нагрузочного теста.

Caused by: com.netflix.hystrix.exception.HystrixRuntimeException: book could not acquire a semaphore for execution and no fallback available.
    at com.netflix.hystrix.AbstractCommand$21.call(AbstractCommand.java:783) ~[hystrix-core-1.5.3.jar:1.5.3]

Мой вопрос, как я могу увеличить maxSemaphores через конфигурацию.

hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds= 20000000
zuul.hystrix.command.default.execution.isolation.strategy= SEMAPHORE
zuul.hystrix.command.default.execution.isolation.semaphore.maxConcurrentRequests= 10
zuul.hystrix.command.default.fallback.isolation.semaphore.maxConcurrentRequests= 10
zuul.semaphore.maxSemaphores=3000

zuul.eureka.book.semaphore.maxSemaphore = 30000

Я попробовал поискать много вариантов на Intenet, но одна из тех работ для меня

пожалуйста, порекомендуйте

3 ответа

Оказывается, я использую старую версию. Для более поздней версии мы могли бы установить семафоры на уровне Zuul. ниже приведен пример установки maxSemaphores 3000 по умолчанию для маршрутизации на каждую прокси-службу

zuul.semaphore.maxSemaphores=3000

Я могу настроить maxSemaphores для определенного server_id 'book' как показано ниже:

zuul.eureka.book.semaphore.maxSemaphores=30000

Однако я хочу установить значение по умолчанию для всех ленточных клиентов, маршрутизирующих к внутренним микро-сервисам, что-то вроде следующего

zuul.eureka.default.semaphore.maxSemaphores=30000

но это не дает никакого эффекта.

Я также проверяю код класса RestClientRibbonCommand, интересно, что он поддерживает только базу server_id.

фрагмент кода

protected static HystrixCommand.Setter getSetter(String commandKey) {
        // we want to default to semaphore-isolation since this wraps
        // 2 others commands that are already thread isolated
        String name = ZuulConstants.ZUUL_EUREKA + commandKey + ".semaphore.maxSemaphores";
        DynamicIntProperty value = DynamicPropertyFactory.getInstance().getIntProperty(
                name, 100);
        HystrixCommandProperties.Setter setter = HystrixCommandProperties.Setter()
                .withExecutionIsolationStrategy(ExecutionIsolationStrategy.SEMAPHORE)
                .withExecutionIsolationSemaphoreMaxConcurrentRequests(value.get());
        return Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("RibbonCommand"))
                .andCommandKey(HystrixCommandKey.Factory.asKey(commandKey))
                .andCommandPropertiesDefaults(setter);
    }

это довольно странно, поскольку Zuul означает динамическую маршрутизацию, поэтому я не хочу настраивать каждую отдельную службу.

Пожалуйста, порекомендуйте?

Фактическое свойство - max-семафоры (это было бы с конфигурацией yaml):

zuul:
  semaphore:
    #com.netflix.hystrix.exception.HystrixRuntimeException: "microservice" could not acquire a semaphore for execution and no fallback available.
    max-semaphores: 2000
Другие вопросы по тегам