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,返回一个默认的值(缺省值),虽然整体水平下降了,但是还可以用