springcloud的熔断和降级

Feign的使用

达到的效果:用户访问feign接口,由feign将请求派发到具体的某一个服务上,并且feign整合了负载均衡

当我们直接访问服务的提供方8001,访问的是它的controller的某个方法,见下图

可以清楚的看到是通过service调用的dao查询数据库返回下图结果

 

 当我们访问的是feign的接口时,我们访问的是80端口,由feign提供访问其他服务器的功能

feign的调用其他服务接口的功能就在@FeignClient注解中实现,参数value指的就是需要被代理的服务的名称

 访问的结果就是下图:

 总结: Feign集成了Ribbon,默认以轮询的方式调用微服务实例,简单方便的实现了负载均衡的功能

关于Hystrix熔断

实现的效果:当我们通过消费者的服务器去访问服务提供者的服务器,当数据信息是不存在时,我们给消费者一个友善的提醒,防止重复对服务提供者的服务器造成大量不必要的访问

当我们通过消费者端向服务端发起访问,当查询的部门的id是存在的,则正常返回部门的数据信息

当部门的数据信息查询不存在时,那么将返回fallback服务降级

下图查询部门编号为7的部门,数据是null,则进入熔断方法

 服务提供端的服务器的代码如下:在controller层对接口的访问添加了注解@HystrixCommand,并且指定了熔断调取的方法 processHystrix_Get()

熔断的操作可以在原来的服务提供方上进行升级,不需要说重新创建一个module(因为我在第一次学习时,教程上是重新创建了一个module,我以为需要将两者同时运行才能起到服务熔断的效果),然后再添加服务熔断的方法

服务降级

服务降级是整体资源快不够了,忍痛将某些服务先关掉,待度过难关,在开启回来。

服务降级处理时在客户端完成,与服务端没有关系

服务降级是不是在 feign的基础上延伸的????

在服务提供方的feign的接口基础上,增加

 服务降级的类需要继承FallbackFactory

@Component
public class DeptClientServiceFallbackFactory implements FallbackFactory<DeptClientService>
{
    @Override
    public DeptClientService create(Throwable throwable)
    {
        return new DeptClientService() {
            @Override
            public Dept get(long id)
            {
                return new Dept().setDeptno(id)
                        .setDname("该ID:"+id+"没有没有对应的信息,Consumer客户端提供的降级信息,此刻服务Provider已经关闭")
                        .setDb_source("no this database in MySQL");
            }

            @Override
            public List<Dept> list()
            {
                return null;
            }

            @Override
            public boolean add(Dept dept)
            {
                return false;
            }
        };
    }
}

 实现的效果:当服务器宕机之后,客户端能给用户一个提醒

比如:现在能正常访问服务的提供方

 当我们关闭服务提供方时,服务就会进入降级,防止重复发送导致服务崩溃

 关于服务降级的service写好之后,需要由controller进行调用才会走服务降级的方法

猜你喜欢

转载自blog.csdn.net/awodwde/article/details/118964619