springcloud服务熔断和降级

1、前提

分布式项目在发布时,由于某些原因导致服务不可用,调用这个服务的其他服务由于没有得到反馈,则会持续不断调用,增加了资源开销。处理方法:服务熔断和服务降级。

2、服务熔断

从数据库查询一个信息,这个信息为空,抛出了空指针异常(如果还要继续调用下一个服务,但是dept出现问题,导致服务不可用,前面的服务无法得到响应)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
     * 根据id查询的方法
     * @param id
     * @return
     */
    @GetMapping("/get/{id}")
    @HystrixCommand(fallbackMethod="hystrixGet")
    public Dept get(@PathVariable("id") Long id){
        Dept dept = deptService.get(id);
        if(dept == null){
            throw new NullPointerException("对象查询失败");
        }
        return dept;
    }

服务熔断是增加了注解@HystrixCommand,如果失败就调用这个方法,使得前面的服务可以得到响应,所以应在服务提供者给与响应

1
2
3
public Dept hystrixGet(Long id){
        return new Dept().setId(id).setName("账号已注销").setDbSource("");
    }

启动类需要添加注解@EnableHystrix

 3、服务降级:

当服务调用达到高峰期,部分服务器压力巨大时,需要关闭一部分服务,使得空闲的服务器不占用资源,在服务调用者处给与响应(在接口加上注解@FeignClient   fallbackFactory = DeptClientServiceFallBackFactory.class)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@Component
public class DeptClientServiceFallBackFactory implements FallbackFactory {
    @Override
    public DeptClientService create(Throwable cause) {
        return new DeptClientService() {
            @Override
            public String add(Dept dept) {
                return "服务暂时不可用";
            }
 
            @Override
            public Dept queryById(Long id) {
                return new Dept().setId(id).setName("").setDbSource("");
            }
 
            @Override
            public List<Dept> list() {
                List<Dept> deptList = new ArrayList<>();
                return deptList;
            }
        };
    }
}
posted @   此时不卷何时卷  阅读(204)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示