스프링 부트 응용 프로그램에서 application.yaml을 사용하여 hystrix 명령 속성 구성
application.yaml의 hystrix 속성을 덮어쓰려고 하는 것과 같은 문제가 있습니다.앱을 실행하고 localhost:port/app-context/hystrix.stream에서 속성을 확인하면 대신 모든 기본값이 표시됩니다.
어플리케이션의 hystrix 설정을 다음에 나타냅니다.
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
브라우저에서 url localhost:port/app-context/hystrix.stream을 클릭하면 다음과 같이 표시됩니다.[이것은 히스트릭스 대시보드에 사용되는 스트림 URL과 동일합니다] -
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}
이 문제는 스레드풀 속성이 올바르게 설정되어 있는 hystrix 명령어와 collapser 속성에 있습니다.@configuration 클래스에는 다음과 같은 주석이 있습니다.
@EnableAutoConfiguration(exclude=MongoAutoConfiguration.class)
@EnableHystrix
@EnableHystrixDashboard
Spring-Boot 어플리케이션에서 application.yaml을 사용하여 hystrix 명령 속성을 설정해 본 적이 있습니까?
가장 큰 문제는 commandKey 값이 아닌 groupKey 값을 사용하여 속성을 정의하는 것이었습니다.이러한 설정 속성의 Wiki 페이지에는, https://github.com/Netflix/Hystrix/wiki/Configuration#intro 가 다음과 같이 표시됩니다.
hystrix.command.HystrixCommandKey.execution.isolation.thread.timeoutInMilliseconds
속성의 HystrixCommandKey 부분을 명령 키에 대해 설정한 값으로 바꿉니다.
hystrix.threadpool.HystrixThreadPoolKey.coreSize
속성의 HystrixThreadPoolKey 부분을 threadPoolKey에 대해 설정한 값으로 바꿉니다.
Hystrix Command로 포장된 메서드에 대해 commandKey와 threadPoolKey를 모두 정의하는 방법은 다음과 같습니다.
@HystrixCommand(groupKey = "StoreSubmission", commandKey = "StoreSubmission", threadPoolKey = "StoreSubmission")
public String storeSubmission(ReturnType returnType, InputStream is, String id) {
}
실제로 @HystixCommand 주석 내의 메서드에서 명령어와 스레드풀 속성을 모두 정의할 수 있습니다.
@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) {
}
이러한 속성을 정의하는 가장 좋은 방법은 외부화된 application.yaml을 사용하는 것입니다.이를 통해 보다 효과적으로 제어하고 다양한 환경에 맞게 변경할 수 있습니다.
언급URL : https://stackoverflow.com/questions/31211685/configuring-hystrix-command-properties-using-application-yaml-in-spring-boot-app
'source' 카테고리의 다른 글
마크업에서 각도 범위 변수 설정 (0) | 2023.03.08 |
---|---|
각도에서의 토스터 사용JS 방식 (0) | 2023.03.08 |
esc_url, esc_html, esc_attr 사용방법...기능들 (0) | 2023.03.08 |
Jest에서 FileName.css 모듈을 찾을 수 없습니다(identity-obj-proxy로 매핑됨). (0) | 2023.03.08 |
reactjs에서 배경 이미지를 설정하는 방법 (0) | 2023.02.26 |