Open Qi18 opened 1 month ago
hello!感谢你提出的这个问题。 熔断器的设计是没有问题的,因为熔断器是从CircuitBreakerProvider中获取,而CircuitBreakerProvider在初始化代理对象时就已经创建,所有的请求共用一个Provider。 但是实际情况发现每次请求都创建了一个熔断器,原因是因为如图 1.没有在创建CircuitBreaker后将其放进map中 2.没有对获取的方法进行加锁的操作,导致出现的并发问题
在修复之后,50个线程访问时还是不能出现熔断成功的现象;这是因为大家都快速的经过了熔断器的判断,而统一卡在后面调用的流程中,所以即使限流器已经关闭了,所有的线程已经通过了判断,就不会被拒绝。所以在test中改为 120 个线程,每隔30个等待10s,这时就能够发现熔断器生效
在我启动线程去测试熔断器生效时发现,每个线程请求都是单独的熔断器,所以整体来说不会产生熔断效果。但是,考虑到熔断器是在客户端的所以这样设计——对每个线程都会产生一个熔断器是正确的设计吗