SpringCloud09:Hystrix服务降级

springcloud 第1课 :Rest学习环境搭建—服务提供者
springcloud 第2课 :Rest学习环境搭建—服务消费者
springcloud 第3课 :Eureka是什么
springcloud 第4课 :Eureka服务注册、信息配置、自我保护机制
springcloud 第5课 :Eureka集群环境配置
springcloud 第6课 :Ribbon实现负载均衡
springcloud 第7课 :Feign负载均衡
springcloud 第8课 :Hystrix服务熔断

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

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

所谓降级,就是一般是从整体符合考虑,就是当某个服务熔断之后,服务器将不再被调用,此刻客户端可以自己准备一个本地的fallback回调,返回一个缺省值,这样做,虽然服务水平下降,但好歹可用,比直接挂掉要强。

修改消费者服务接口的提供者项目(microservicecloud-api),让service接口实现一个FallbackFactory接口类DeptClientServiceFallbackFactory(千万记得增加 @Component 注解);

注意:直接在接口定义的熔断机制中进行服务熔断,之前在controller上的@HystrixCommand(fallbackMethod=”methodName”)将弃用

举个栗子:服务降级

1、DeptClientServiceFallbackFactory

package com.lian.springcloud.service;

import com.lian.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("没有对应的信息,客户端提供了降级的信息,这个服务已经被关闭");
            }

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

            @Override
            public Boolean addDept(Dept dept) {
                return false;
            }
        };
    }
}

2、DeptClientService 修改提供服务的service熔断处理的机制

此处是在公共的service对某个service的方法访问出现异常后进行统一的fallback处理,即在 DeptClientService接口在注解@FeignClient 中添加 fallbackFactory 属性值,该属性赋值为实现FallbcakFactory接口的异常处理类

package com.lian.springcloud.service;

import com.lian.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<Dept> queryAll();

    @PostMapping("/dept/add")
    Boolean addDept(Dept dept);
}

3、开启feign中的hystrix

在消费者工程(springcloud-consumer-dept-feign)的yml文件配置

#开启服务降级 feign.hystrix.FallbackFactory
feign:
  hystrix:
    enabled: true

4、将 microservicecloud-api 工程重新打包,执行: mvn clean install

在这里插入图片描述

5、测试

(1)启动3个 eureka 服务;
(2)启动 springcloud-provider-dept-8001 服务;
(3)启动 springcloud-consumer-dept-feign 服务;
(4)在浏览器中访问:http://localhost//consumer/dept/get/1
在这里插入图片描述
(5)将 microservicecloud-provider-dept-8001 服务关闭,浏览器访问:http://localhost/consumer/dept/get/1
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值