SpringCloudAlibaba - Feign 整合 Sentinel

前言

记录下Feign整合Sentinel的方式
Feign的整合与Sentinel的整合查看系列文章


环境

Spring Cloud Hoxton.SR9 + Spring Cloud Alibaba 2.2.6.RELEASE + Sentinel 1.8.1


简单示例

  • 实现内容中心使用feign调用用户中心接口限流

content-center

  • application.yml
feign:
  sentinel:
    # 为 Feign 整合 Sentinel
    enabled: true
  • TestController.java
@RestController
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class TestController {

	 private final TestFeignClient testFeignClient;

    @GetMapping("test6")
    public String test6() {
        return testFeignClient.test("Coisini");
    }
    
}
  • TestFeignClient.java
@FeignClient(name = "user-center")
public interface TestFeignClient {

    /**
     * test接口被调用时,feign会构造出 url
     * http://user-center/test/{name} 完成请求
     * @param name
     * @return
     */
    @GetMapping("/test/{name}")
    String test(@PathVariable String name);

}

user-center

TestController.java

@RestController
@Slf4j
public class TestController {

    @GetMapping("/test/{name}")
    public String test(@PathVariable String name) {
        log.info("请求...");
        return "hello " + name;
    }

}

测试

  • 调用接口

在这里插入图片描述


  • 通过簇点链路配置一条QPS1的流控规则

在这里插入图片描述

  • 频繁访问接口触发流控

在这里插入图片描述



定制自己的逻辑处理

  • 可以通过@FeignClientfallback属性定制自己的逻辑处理,也就是远程调用被流控了时的业务处理逻辑

  • TestFeignClient.java

@FeignClient(name = "user-center", fallback = TestFeignClientFallback.class)
  • TestFeignClientFallback.java
/**
 * TestFeignClient 被流控时的处理逻辑
 */
@Component
public class TestFeignClientFallback implements TestFeignClient {
    @Override
    public String test(String name) {
        // 业务逻辑
        return "流控/降级";
    }
}
  • 重新启动应用配置流控规则频繁访问接口触发流控

在这里插入图片描述



限流/降级的异常捕捉

  • 可以通过@FeignClientfallbackFactory属性捕捉异常
  • TestFeignClient.java
@FeignClient(name = "user-center", fallbackFactory = TestFeignClientFallbackFactory.class)
  • TestFeignClientFallbackFactory.java
@Component
@Slf4j
public class TestFeignClientFallbackFactory implements FallbackFactory<TestFeignClient> {
    @Override
    public TestFeignClient create(Throwable cause) {
        return new TestFeignClient() {
            @Override
            public String test(String name) {
                log.warn("远程调用被限流/降级了", cause);
                return "远程调用被限流/降级了";
            }
        };
    }
}
  • 重新启动应用配置流控规则频繁访问接口触发流控

在这里插入图片描述


  • 后台异常的打印

在这里插入图片描述

注:fallback 与 fallbackFactory 二选一使用


项目源码


- End -
白嫖有风险
点赞加收藏
posted @ 2021-09-26 19:44  Maggieq8324  阅读(296)  评论(0编辑  收藏  举报