包虫病

注册

 

发新话题 回复该主题

SpringCloudAlibabaS [复制链接]

1#
北京十大最好白癜风的医院 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";}}

测试熔断器,关闭我们的服务提供者再次请求

分享 转发
TOP
发新话题 回复该主题