Hystrix: 服务降级

cloud是基础,eureka是服务注册和发现,consumer是消费者去消费provider里的东西,消费方式就是Feign和Ribbon,feign  接口消费,ribbon  Rest消费

服务降级发生在客户端,客户端因为请求关闭的服务器,让他访问另一个降级服务

服务熔断发生在服务端,服务器报异常了,就会让请求走第二个服务

先写一个实现类

package com.kuang.springcloud.service;

import com.kuang.springcloud.pojo.Dept;
import feign.hystrix.FallbackFactory;
import org.springframework.stereotype.Component;

import java.util.List;
//降级
@Component
public class DeptClientServiceFallbackFactory implements FallbackFactory {

    @Override
    public DeptClientService create(Throwable throwable) {
        return new DeptClientService() {
            @Override
            public Dept queryById(Long id) {
                return new Dept().setDeptno(id).setDname("这个Id=>"+id+"没有对应的信息,客户端提供了降级的信息,这个服务现在已经被关闭")
                        .setDb_source("没有数据~");
            }

            @Override
            public List queryAll() {
                return null;
            }

            @Override
            public String addDept(Dept dept) {
                return null;
            }
        };
    }
}

在接口那里加一个注解  feign里

package com.kuang.springcloud.service;

import com.kuang.springcloud.pojo.Dept;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;

import java.util.List;

@Component
@FeignClient(value = "SPRINGCLOUD-PROVIDER-DEPT",fallbackFactory = DeptClientServiceFallbackFactory.class)
public interface DeptClientService {

    @GetMapping("/dept/get/{id}")
    Dept queryById(@PathVariable("id") Long id);

    @GetMapping("/dept/list")
    List queryAll();

    @PostMapping("/dept/add")
    String addDept(Dept dept);



}

在消费者fegin里的yml文件加上配置 

server:
  port: 80

#开启降级feign.hystrix
feign:
  hystrix:
    enabled: true



#Eureka 配置
eureka:
  client:
    register-with-eureka: false #不向Eureka注册自己
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/

Hystrix: 服务降级_第1张图片

 Hystrix: 服务降级_第2张图片

然后把服务器关了。

服务降级生效 

Hystrix: 服务降级_第3张图片 Hystrix: 服务降级_第4张图片

 就是当服务器在A爆满的时候需要关闭其他的服务器来去跑A的服务,才能支撑,但是别人访问C的时候,你必须采用服务降级,来让他知道服务器关闭了,而不是直接抛个异常给他。

Hystrix: 服务降级_第5张图片

 

你可能感兴趣的:(SpringCloud,hystrix,java,开发语言)