server:
port: 8081
spring:
application:
name: consumer-user-service
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
fetch-registry: true
register-with-eureka: true
instance:
instance-id: ${spring.application.name}:${server.port}
prefer-ip-address: true
feign:
hystrix:
enabled: true
hystrix: #hystrix 的全局控制
command:
default: #default 是全局控制,也可以换成单个方法控制,把 default 换成方法名即可
fallback:
isolation:
semaphore:
maxConcurrentRequests: 1000 #信号量隔离级别最大并发数
circuitBreaker:
enabled: true #开启断路器
requestVolumeThreshold: 3 #失败次数(阀值)
sleepWindowInMilliseconds: 20000 #窗口时间
errorThresholdPercentage: 60 #失败率
execution:
isolation:
Strategy: thread #隔离方式 thread 线程隔离集合和 SEMAPHORE 信号量隔离级别
thread:
timeoutInMilliseconds: 3000 #调用超时时长
ribbon:
ReadTimeout: 5000 #要结合 feign 的底层 ribbon 调用的时长
ConnectTimeout: 5000
隔离方式
两种隔离方式
-
thread 线程池 按照 group(10 个线程)划分服务提供者,用户请求的线程和做远程的线程不一样
-
好处 :当 B 服务调用失败了 或者请求 B 服务的量太大了 不会对 C 服务造成影响 用户访问比较大的情况下使用比较好 异步的方式,隔离的彻底。
-
缺点 :线程间切换开销大,对机器性能影响
-
应用场景 调用第三方服务 并发量大的情况下
-
-
SEMAPHORE 信号量隔离 每次请进来 有一个原子计数器 做请求次数的++ 当请求完成以后 –
-
好处 对 cpu 开销小
-
缺点 并发请求不易太多 当请求过多 (有阈值)就会拒绝请求 做一个保护机制,影响其他服务。隔离不彻底
-
场景 使用内部调用 ,并发小的情况下
-