openFeign+sentinel 对远程调用熔断降级

openFeign+sentinel 对远程调用熔断降级

需求:
在member-service-nacos-consumer-80 调用某个无效服务时,启动Sentinel的熔断降级机制, 能够快速返回响应,而不是使用默认的超时机制(因为超时机制容易线程堆积, 从而导致雪崩)

异常场景

1. 两个服务都挂掉


由于 Customer 它要定时从 Nacos 把服务拿过来【它担心服务是有变化的,时间大概是 30s 左右】

2. 两个服务都正常,将 10004 执行时间设置成 2s,10006 正常执行

代码 + 配置解决问题

本质:对 Service 中方法的异常处理

1. 写一个类,实现这个接口【使用 @Component注解注入容器】

package com.llq.springcloud.service;

@Component
public class MemberFeignFallbackService implements MemberOpenFeignService {
    @Override
    public Result<Member> getMemberById(Long id) {
        return Result.error("500", "被调用服务异常 ===> 熔断降级,快速返回结果,防止线程堆积");
    }
}

2. 在接口中,增加fallback 注解,调用实现接口的类来处理异常

@FeignClient(value = "member-service-nacos-provider", fallback = MemberFeignFallbackService.class)   //  value:服务名称
public interface MemberOpenFeignService {
    @GetMapping(value = "/member/get/{id}")
    public Result<Member> getMemberById(@PathVariable("id") Long id);
}

异常处理逻辑如下:

3.application.yml 中进行 openFeign 和 sentinel 整合

  server:
    port: 81
  spring:
    application:
     name: member-service-nacos-consumer-81
    cloud:
      nacos:
        discovery:
          server-addr: localhost:8848
      # 配置 sentinel
      sentinel:
        transport:
          dashboard: localhost:9999
          port: 8888
  # 配置暴露所有监控点
  management:
    endpoints:
      web:
        exposure:
          include: '*'
  # openfeign 和 sentinel 整合,必须配置
  feign:
    sentinel:
      enabled: true

测试:

4. 注意事项

注意:由于 Consumer 已经被 sentinel 监控,所以我们可以加入相关的流控规则,比如为 /member/openfeign/consumer/get/1 加入流控规则 QPS = 1

那么则:

  • 服务器正常
    • QPS > 1,限流
    • 正常返回
  • 服务器异常
    • QPS > 1,限流
    • 异常,被 fallback 处理
posted @ 2023-12-12 12:47  爱新觉罗LQ  阅读(116)  评论(0编辑  收藏  举报