source

스프링 부트 응용 프로그램에서 application.yaml을 사용하여 hystrix 명령 속성 구성

lovecheck 2023. 3. 8. 21:16
반응형

스프링 부트 응용 프로그램에서 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

반응형