- 前言
- 环境
- 简单示例
- content-center
- user-center
- 测试
- 定制自己的逻辑处理
- 限流/降级的异常捕捉
记录下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 {
@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
@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{ @Override public TestFeignClient create(Throwable cause) { return new TestFeignClient() { @Override public String test(String name) { log.warn("远程调用被限流/降级了", cause); return "远程调用被限流/降级了"; } }; } }
- 重新启动应用配置流控规则频繁访问接口触发流控
- 后台异常的打印
注:fallback 与 fallbackFactory 二选一使用



