Конфигурация 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