I am having same issue, where i am trying to override the hystrix properties in application.yaml. When I run the app & check the properties with localhost:port/app-context/hystrix.stream, I get all default values instead.
here is the hystrix config in my application.yaml
hystrix: command.StoreSubmission.execution.isolation.thread.timeoutInMilliseconds: 30000 command.StoreSubmission.circuitBreaker.requestVolumeThreshold: 4 command.StoreSubmission.circuitBreaker.sleepWindowInMilliseconds: 60000 command.StoreSubmission.metrics.rollingStats.timeInMilliseconds: 180000 collapser.StoreSubmission.maxRequestsInBatch: 1 collapser.StoreSubmission.requestCache.enabled: FALSE threadpool.StoreSubmission.coreSize: 30 threadpool.StoreSubmission.metrics.rollingStats.timeInMilliseconds: 180000
Here is what I see when I hit the url - localhost:port/app-context/hystrix.stream in browser [ this is same stream url used for hystrix dashboard ] -
data: {"type":"HystrixCommand","name":"storeSubmission","group":"StoreSubmission","currentTime":1435941064801,"isCircuitBreakerOpen":false,"errorPercentage":0,"errorCount":0,"requestCount":0,"rollingCountCollapsedRequests":0,"rollingCountExceptionsThrown":0,"rollingCountFailure":0,"rollingCountFallbackFailure":0,"rollingCountFallbackRejection":0,"rollingCountFallbackSuccess":0,"rollingCountResponsesFromCache":0,"rollingCountSemaphoreRejected":0,"rollingCountShortCircuited":0,"rollingCountSuccess":0,"rollingCountThreadPoolRejected":0,"rollingCountTimeout":0,"currentConcurrentExecutionCount":0,"latencyExecute_mean":0,"latencyExecute":{"0":0,"25":0,"50":0,"75":0,"90":0,"95":0,"99":0,"99.5":0,"100":0},"latencyTotal_mean":0,"latencyTotal":{"0":0,"25":0,"50":0,"75":0,"90":0,"95":0,"99":0,"99.5":0,"100":0},"propertyValue_circuitBreakerRequestVolumeThreshold":20,"propertyValue_circuitBreakerSleepWindowInMilliseconds":5000,"propertyValue_circuitBreakerErrorThresholdPercentage":50,"propertyValue_circuitBreakerForceOpen":false,"propertyValue_circuitBreakerForceClosed":false,"propertyValue_circuitBreakerEnabled":true,"propertyValue_executionIsolationStrategy":"THREAD","propertyValue_executionIsolationThreadTimeoutInMilliseconds":1000,"propertyValue_executionIsolationThreadInterruptOnTimeout":true,"propertyValue_executionIsolationThreadPoolKeyOverride":null,"propertyValue_executionIsolationSemaphoreMaxConcurrentRequests":10,"propertyValue_fallbackIsolationSemaphoreMaxConcurrentRequests":10,"propertyValue_metricsRollingStatisticalWindowInMilliseconds":10000,"propertyValue_requestCacheEnabled":true,"propertyValue_requestLogEnabled":true,"reportingHosts":1} data: {"type":"HystrixThreadPool","name":"StoreSubmission","currentTime":1435941064801,"currentActiveCount":0,"currentCompletedTaskCount":35,"currentCorePoolSize":30,"currentLargestPoolSize":30,"currentMaximumPoolSize":30,"currentPoolSize":30,"currentQueueSize":0,"currentTaskCount":35,"rollingCountThreadsExecuted":0,"rollingMaxActiveThreads":0,"propertyValue_queueSizeRejectionThreshold":5,"propertyValue_metricsRollingStatisticalWindowInMilliseconds":180000,"reportingHosts":1}
The problem is with hystrix command & collapser properties, where as threadpool properties are set correctly. I have got following annotations in my @configuration class -
@EnableAutoConfiguration(exclude=MongoAutoConfiguration.class) @EnableHystrix @EnableHystrixDashboard
Has someone tried configuring hystrix command properties using application.yaml in thier Spring-Boot application, can help please?
First, we need to add the Spring Cloud Starter Hystrix dependency in our build configuration file. Now, add the @EnableHystrix annotation into your main Spring Boot application class file. The @EnableHystrix annotation is used to enable the Hystrix functionalities into your Spring Boot application.
It is used to provide metadata/configuration to particular methods. To run method as Hystrix command synchronously you need to annotate method with @HystrixCommand annotation. By default the name of command key is command method name: doTest , default group key name is class name of annotated method: HystrixService.
timeout=10000 , setting the default Hystrix command timeout to 10 seconds. It is even simpler with environment variables - thanks to relaxed binding, any of these will work ( export examples are for Linux): export service. timeout=10000.
The main problem was that, I was using groupKey value instead of commandKey value to define the properties. The wiki page for these configuration properties - https://github.com/Netflix/Hystrix/wiki/Configuration#intro says -
hystrix.command.HystrixCommandKey.execution.isolation.thread.timeoutInMilliseconds
Replace the HystrixCommandKey portion of the property with the value you set for commandkey.
hystrix.threadpool.HystrixThreadPoolKey.coreSize
Replace the HystrixThreadPoolKey portion of the property with the value you set for threadPoolKey.
Here is how I define both commandKey & threadPoolKey over the method wrapped by HystrixCommand -
@HystrixCommand(groupKey = "StoreSubmission", commandKey = "StoreSubmission", threadPoolKey = "StoreSubmission") public String storeSubmission(ReturnType returnType, InputStream is, String id) { }
You can actually define both command & threadpool properties on the method within @HystixCommand annotation.
@HystrixCommand(groupKey = "StoreSubmission", commandKey = "StoreSubmission", threadPoolKey = "StoreSubmission", commandProperties = { @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "30000"), @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value = "4"), @HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds", value = "60000"), @HystrixProperty(name = "metrics.rollingStats.timeInMilliseconds", value = "180000") }, threadPoolProperties = { @HystrixProperty(name = "coreSize", value = "30"), @HystrixProperty(name = "metrics.rollingStats.timeInMilliseconds", value = "180000") }) public String storeSubmission(ReturnType returnType, InputStream is, String id) { }
I guess the best way to define these properties is in externalized application.yaml, that way you can control it better & change them for different environments.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With