五、Feign中实现断路器模式

为什么要实现断路器模式?

在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以相互调用(RPC),在Spring Cloud可以用RestTemplate+Ribbon或Feign来调用。为了保证其高可用,单个服务通常会集群部署。由于网络原因或者自身的原因,服务并不能保证100%可用,如果单个服务出现问题,调用这个服务就会出现线程阻塞,此时若有大量的请求涌入,Servlet容器的线程资源会被消耗完毕,导致服务瘫痪。服务与服务之间的依赖性,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的“雪崩”效应。

为了解决这个问题,业界提出了断路器模型。

断路器模式的简单原理:

在微服务架构中,一个请求需要调用多个服务是非常常见的,较底层的服务如果出现故障,会导致连锁故障。当对特定的服务的调用的不可用达到一个阀值(Hystric 是5秒20次)断路器将会被打开。断路打开后,可用避免连锁故障,fallback方法可以直接返回一个固定值。

1.我们可以在上一个项目上接着写,不需要新建项目了,打开上节项目的UserService,添加注解:

  @FeignClient(value="user-service",fallback=CustomUserServiceFallback.class)

这是实现断路器模式的关键,当远程服务调用失败时,将直接获得该类里面提供的信息。

2.因为没有这个类,所以idea报错,下面我们就来创建这个回调类:

首先在servic下面新建一个包,命名为fallback;

 在fallback里面新建一个类,命名为UserServiceFallback,纳入spring容器,并实现UserService接口,进行方法重写,返回当某个服务断开时你希望看到的提示内容。

3.修改application.yaml配置文件,打开断路器模式:

4.启动项目,开始测试

  先看一个所有服务都正常的:

现在我们停掉8082端口的服务,假装它坏了:图中可以看出,警报已经发过来了。

你可能感兴趣的:(五、Feign中实现断路器模式)