首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Hystrix获取异常

从Hystrix获取异常
EN

Stack Overflow用户
提问于 2020-10-16 21:49:52
回答 1查看 336关注 0票数 0

我正在使用hystrix进行spring boot项目,但是得到了超时异常。

有关详细信息,请参阅下面的控制器代码

代码语言:javascript
复制
@GetMapping("/getData")
@HystrixCommand(fallbackMethod = "getDataFallBack", commandProperties = { @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "60000"), @HystrixProperty(name = "execution.isolation.strategy", value = "SEMAPHORE") })
public ResponseEntity<Object> getData() {

}

/**
 * Fallback method for getData
 */
public ResponseEntity<Object> getDataFallBack(Throwable e) {
    LOGGER.info("In fallback method", e)
}

当测试更多的呼叫时,比如5分钟内1500次点击,然后得到超时异常。同时检查日志,然后找到下面的日志

代码语言:javascript
复制
java.lang.RuntimeException: could not acquire a semaphore for execution
    at com.netflix.hystrix.AbstractCommand.handleSemaphoreRejectionViaFallback(AbstractCommand.java:966) ~[hystrix-core-1.5.18.jar!/:1.5.18]
    at com.netflix.hystrix.AbstractCommand.applyHystrixSemantics(AbstractCommand.java:554) ~[hystrix-core-1.5.18.jar!/:1.5.18]
    at com.netflix.hystrix.AbstractCommand.access$200(AbstractCommand.java:60) ~[hystrix-core-1.5.18.jar!/:1.5.18]
    at com.netflix.hystrix.AbstractCommand$4.call(AbstractCommand.java:419) ~[hystrix-core-1.5.18.jar!/:1.5.18]
    at com.netflix.hystrix.AbstractCommand$4.call(AbstractCommand.java:413) ~[hystrix-core-1.5.18.jar!/:1.5.18]
    at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:46) [rxjava-1.3.8.jar!/:1.3.8]
    at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:35) [rxjava-1.3.8.jar!/:1.3.8]
    at rx.Observable.unsafeSubscribe(Observable.java:10327) [rxjava-1.3.8.jar!/:1.3.8]
    at rx.internal.operators.OnSubscribeMap.call(OnSubscribeMap.java:48) [rxjava-1.3.8.jar!/:1.3.8]
    at rx.internal.operators.OnSubscribeMap.call(OnSubscribeMap.java:33) [rxjava-1.3.8.jar!/:1.3.8]
    at rx.Observable.unsafeSubscribe(Observable.java:10327) [rxjava-1.3.8.jar!/:1.3.8]
    at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:41) [rxjava-1.3.8.jar!/:1.3.8]
    at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:30) [rxjava-1.3.8.jar!/:1.3.8]
    at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48) [rxjava-1.3.8.jar!/:1.3.8]
    at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30) [rxjava-1.3.8.jar!/:1.3.8]

有没有人可以告诉我如何解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2020-10-21 03:38:13

您需要添加hystrix属性execution.isolation.semaphore.maxConcurrentRequests并将其设置为更高的数字(200)。execution.isolation.semaphore.maxConcurrentRequests的默认值是" 10“,因此允许getData()方法并行执行不超过10次。

同样,对于回退方法,您需要添加fallback.isolation.semaphore.maxConcurrentRequests并将其设置为200。

代码语言:javascript
复制
    @GetMapping("/getData")
    @HystrixCommand(fallbackMethod = "getDataFallBack", commandProperties = { @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "60000"), 
    @HystrixProperty(name = "execution.isolation.strategy", value = "SEMAPHORE"),@HystrixProperty(name = "execution.isolation.semaphore.maxConcurrentRequests", value = "200") })
    public ResponseEntity<Object> getData() {
    
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64390516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档