北京十大最好白癜风的医院 http://m.39.net/pf/bdfyy/bjzkbdfyy/在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以通过RPC相互调用,在SpringCloud中可以用RestTemplate+LoadBalanceClient和Feign来调用。为了保证其高可用,单个服务通常会集群部署。由于网络原因或者自身的原因,服务并不能保证%可用,如果单个服务出现问题,调用这个服务就会出现线程阻塞,此时若有大量的请求涌入,Servlet容器的线程资源会被消耗完毕,导致服务瘫痪。服务与服务之间的依赖性,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的“雪崩”效应。
为了解决这个问题,业界提出了熔断器模型。
阿里巴巴开源了Sentinel组件,实现了熔断器模式,SpringCloud对这一组件进行了整合。
较底层的服务如果出现故障,会导致连锁故障。当对特定的服务的调用的不可用达到一个阀值熔断器将会被打开。
熔断器打开后,为了避免连锁故障,通过fallback方法可以直接返回一个固定值。
那么什么是Sentinel?
随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
OpenFeign中使用Sentinel:
在我们使用OpenFeign的服务中添加Sentinel依赖
dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-alibaba-sentinel/artifactId/dependency
Sentinel适配了Feign组件。但默认是关闭的。需要在配置文件中配置打开它,在配置文件增加以下代码:
feign:sentinel:enabled:true
在service中增加fallback指定类:
packagetop.misterzhang.alibaba.nacos.consumer.feign.service;importorg.springframework.cloud.openfeign.FeignClient;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.PathVariable;importtop.misterzhang.alibaba.nacos.consumer.feign.service.fallback.EchoServiceFallback;/***
authorzhangfan*date00/4/30*//***FeignClient中value="nacos-provider"注解来指定调用哪个服务*fallback=GetIpServiceHystrix.class熔断后调用*/FeignClient(value="nacos-provider",fallback=EchoServiceFallback.class)publicinterfaceEchoService{GetMapping(value="/echo/{message}")Stringecho(PathVariable("message")Stringmessage);}
创建熔断器类并实现Feign接口:
packagetop.misterzhang.alibaba.nacos.consumer.feign.service.fallback;importorg.springframework.stereotype.Component;importtop.misterzhang.alibaba.nacos.consumer.feign.service.EchoService;/***
authorzhangfan*date00/4/30*/ComponentpublicclassEchoServiceFallbackimplementsEchoService{OverridepublicStringecho(Stringmessage){return"echofallback";}}
测试熔断器,关闭我们的服务提供者再次请求