springcloud-hystrix服务降级实现

1、hystrix简单介绍

Hystrix是一个延迟和容错库,旨在隔离对远程系统,服务和第三方库的访问点,停止级联故障,并在不可避免发生故障的复杂分布式系统中实现弹性。

2、hystrix服务降级实现

服务降级是在客户端处理的一种策略,当服务器挂了时,它可以使用默认的缺省值

这篇文章基于如下文章

https://blog.csdn.net/weixin_43520670/article/details/114294972

1. 在api模块的service文件夹编写FallbackFactory的实现类

在api那个模块,我们编写UserClientServiceFallbackFactory实现FallbackFactory方法,作为服务降级的处理方法

具体代码如下:

package com.hzxy.springcloud.service;

import com.hzxy.springcloud.model.User;
import feign.hystrix.FallbackFactory;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;

@Component
public class UserClientServiceFallbackFactory implements FallbackFactory {
    
    


    public UserClientService create(Throwable throwable) {
    
    
        return new UserClientService() {
    
    
            public List<User> Hi() {
    
    
                List<User> users  = new ArrayList<User>();
                User user = new User();
                user.setId(15L).setName("id => " + 15 + ",不存在该用户,或者信息无法找到").setDb("不存在数据库");
                users.add(user);
                return users;
            }	
        };
    }
}

2. 在api模块的service文件夹@FeignClient注解添加参数

添加注解让UserClientServiceFallbackFactory可以使用
完整代码如下

package com.hzxy.springcloud.service;


import com.hzxy.springcloud.model.User;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.List;

@Component
@FeignClient(value = "springcloud-provider-user",fallbackFactory = UserClientServiceFallbackFactory.class)      // value 参数是服务提供者的服务名称,fallbackFactory后面填我们实现的class文件
public interface UserClientService {
    
    

    // 请求提供者的url
    @RequestMapping("/hello")
    public List<User> Hi();
}

3. 在springcloud-consumer-user-feign模块配置服务降级为可用

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

3、测试

开启7001,8001和feign,输入http://ybg.eureka1.com/hi
在这里插入图片描述
当我们关闭8001服务时,再次访问
在这里插入图片描述
它出现了我们默认的缺省值,测试成功!

4、服务熔断与服务降级的区别

  • 服务熔断:位于服务端,某个服务超时或者异常引起熔断
  • 服务降级:位于客户端,从整体网站请求负载考虑,当某个服务器熔断或者关闭之后,服务将不再调用,此时在客户端,我们可以准备一个 FallbackFactory,返回一个默认的值(缺省值),虽然整体水平下降了,但是还可以用

猜你喜欢

转载自blog.csdn.net/weixin_43520670/article/details/114337999