1.Eureka的自我保护机制
默认情况下,服务需要每隔30s向EurekaServer发送心跳,Eureka连续三次都没收到心跳时,则认为服务不可用,会将服务从列表中移除。如果Eureka短时间内收到的心跳数量小于应该收到的85%(默认),那么其会自动进入自我保护模式,服务列表只可以读取,增加,不能删除。当EurekaServer收到的心跳数量恢复到阀值以上时,会自动退出自我保护模式。
修改Eureka配置:
#设置阀值
eureka.server.renewal-percent-threshold:0.78
#关闭自我保护机制
eureka.server.enable-self-preservation:false
2.openFeign
老版本叫feign,新版本叫openFeign,底层采用的ribbon做客户端负载均衡,常用配置:
#连接超时时间
feign.client.config.default.connectTimeout=5000
#从发送请求到获取响应的超时时间
feign.client.config.default.readTimeout=10000
3.Hystrix断路器
方法级别的降级:
@HystrixCommand(fallbackMethod="hystrixMethod")
类级别:xxx实现FallbackFactory接口,然后配置:
@FeignClient(value="server-name",fallbackFactory=xxx.class)
或者xxx实现接口,配置属性改为fallback=xxx.class
为了防止某个服务出问题而影响其它请求,采用了两种隔离策略:
1.线程隔离(默认):采用线程池处理请求,每个依赖的最大线程数是有限制的,达到最大上限时该依赖的请求会阻塞,当然并发也受限于最大线程数。
2.信号量隔离:对依赖的调用也为当前请求线程,用信号量限制每个依赖。达到信号量限制时则阻塞。
修改默认配置:
hystrix.command.default.execution.isolation.strategy=thread
hystrix.command.default.execution.isolation.strategy=semaphore
修改线程执行超时时间(默认1s):
hystrix.command.default.execution.timeout.enabled=true
#设置服务熔断时限
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=2000
也可以修改线程池配置。