微服务保护学习笔记(四)FeignClient整合Sentinel、线程隔离(舱壁模式)、熔断降级

前言

微服务保护学习笔记(一)雪崩问题及解决方案、Sentinel介绍与安装
微服务保护学习笔记(二)簇点链路、流控操作、流控模式(关联、链路)
微服务保护学习笔记(三)流控效果(warm up、排队等待)、热点参数限流

3 隔离和降级

限流是一种预防措施,它可以尽量避免因高并发而引起的服务故障。但服务还会因为其它原因而故障,而要将这些故障控制在一定范围内避免雪崩,就要依靠线程隔离(舱壁模式)和熔断降级手段了。

  • 线程隔离:服务调用者在调用服务提供者时,给每个调用请求分配独立线程池,出现故障时,这个请求最多消耗这个线程池内的资源,避免把调用者的所有资源耗尽。

  • 熔断降级:在调用方这边加入断路器,统计对服务提供者的调用,如果调用的失败比例过高,则熔断该业务,不允许访问该服务提供者。

可以看到,不管是线程隔离还是熔断降级,都是对客户端(调用方)的保护,需要在调用方发起远程调用时做线程隔离或者服务熔断。

SpringCloud微服务远程调用都是基于Feign来完成的,因此需要将Feign与Sentinel整合,在Feign里面实现线程隔离和服务熔断。

3.1 FeignClient整合Sentinel

3.1.1 搭建SpringCloud项目

创建一个SpringCloud项目,sd-user-servicesd-order-service微服务均注册到Eureka中:

sd-user-service微服务中有一个/user/query接口,调用该接口后会通过Feign调用sd-order-service微服务:

// com.hsgx.user.controller.UserController

@Autowired
private OrderClient orderClient;

@GetMapping("/query")
public String query(String id) {
   
    String order = orderClient.queryById(id);
    return "查询用户" + id + "成功," + order;
}
// com.hsgx.order.controller.OrderController

@GetMapping("/query")
public String query(String id) {
   
    return "查询订单" + id + "成功";
}

3.1.2 修改配置文件

修改sd-user-service微服务(调用方)的配置文件,开启Feign的Sentinel功能:


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

维先生d

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值