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 二选一使用
项目源码
GitHub
: https://github.com/Maggieq8324/coisini-cloud-alibabaGitee
: https://gitee.com/maggieq8324/coisini-cloud-alibaba