遇到一个问题
1.定义一个fegin,里面提供了方法A和方法B。
2.在并发的时候,方法A调动超时了,然后触发了熔断;
3.这时候调用方法B也会出现同样的问题,但实际上方法B是可用的,而在微服务中应该是认为的是整个fegin的服务是暂时不可用了(fegin定义都是同一个服务,同一个服务提供了多个接口。服务中其中一个接口不可用或者超时的时候,就认为整个这个fegin服务不可用了。),是hystrix起到了作用。
4.这种场景下要怎么隔离A和B两个方法呢? Hystrix会报告成功、失败、拒绝和超时的指标给回路器,回路器包含了一系列的滑动窗口数据,并通过该数据进行统计。它使用这些统计数据来决定回路器是否应该熔断,如果需要熔断,将在一定的时间内不在请求依赖[短路请求] 也就相当于是说,后续的其他接口服务就直接走fallback了。回路器打开和关闭有如下几种情况:
假设回路中的请求满足了一定的阈值
(HystrixCommandProperties.circuitBreakerRequestVolumeThreshold())
假设错误发生的百分比超过了设定的错误发生的阈值HystrixCommandProperties.circuitBreakerErrorThresholdPercentage()
回路器状态由CLOSE变换成OPEN
如果回路器打开,所有的请求都会被回路器所熔断。 一定时间之后
HystrixCommandProperties.circuitBreakerSleepWindowInMilliseconds(),下一个的请求会被通过(处于半打开状态),如果该请求执行失败,回路器会在睡眠窗口期间返回OPEN,如果请求成功,回路器会被置为关闭状态,重新开启1步骤的逻辑。
来源:云原生后端社区
https://www.yuque.com/server_mind/answer
你得解决造成问题的根本原因,和hystrix没关系
以API维度太细了,而且很多接口包含 PathVariable,没必要管控到这个粒度,且细到API维度,你一个接口出问题,基本上把hystrix的线程池都耗尽了,其他接口一样没有线程可用,所有接口共用线程池的,某服务任意接口有瓶颈,线程池基本就耗尽了
来源:云原生后端社区
https://www.yuque.com/server_mind/answer
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。