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; } }
测试
-
调用接口
-
通过簇点链路配置一条QPS为1的流控规则
-
频繁访问接口触发流控
定制自己的逻辑处理
-
可以通过@FeignClient的fallback属性定制自己的逻辑处理,也就是远程调用被流控了时的业务处理逻辑 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 "流控/降级"; } }
-
重新启动应用配置流控规则频繁访问接口触发流控
限流/降级的异常捕捉
-
可以通过@FeignClient的fallbackFactory属性捕捉异常 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 二选一使用
上一篇:
IDEA上Java项目控制台中文乱码