Spring Cloud Alibaba | Sentinel:分布式系统的流量防卫兵进阶实战
在阅读本文前,建议先阅读《Spring Cloud Alibaba | Sentinel:分布式系统的流量防卫兵基础实战》。
1. Sentinel整合Feign和RestTemplate
Sentinel目前已经同时支持Feign和RestTemplate,需要我们引入对应的依赖,在使用Feign的时候需要在配置文件中打开Sentinel对Feign的支持:feign.sentinel.enabled=true
,同时需要加入openfeign starter
依赖使sentinel starter
中的自动化配置类生效。在使用RestTemplate的时候需要在构造RestTemplate的Bean的时候加上@SentinelRestTemplate
注解,开启Sentinel对RestTemplate的支持。
1.1 创建父工程sentinel-springcloud-high:
父工程pom.xml如下:
代码清单:Alibaba/sentinel-springcloud-high/pom.xml
***
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
公共组件中引入Sentinel做流量控制,引入Nacos做服务中心。
1.2 创建子工程provider_server:
配置文件application.yml如下:
代码清单:Alibaba/sentinel-springcloud-high/provider_server/pom.xml
***
server:
port: 8000
spring:
application:
name: spring-cloud-provider-server
cloud:
nacos:
discovery:
server-addr: 192.168.44.129:8848
sentinel:
transport:
dashboard: localhost:8080
port: 8720
management:
endpoints:
web:
cors:
allowed-methods: '*'
接口测试类HelloController.java如下:
代码清单:Alibaba/sentinel-springcloud-high/provider_server/src/main/java/com/springcloud/provider_server/controller/HelloController.java
***
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello(HttpServletRequest request) {
return "Hello, port is: " + request.getLocalPort();
}
}
1.3 创建子工程consumer_server:
子工程依赖pom.xml如下:
代码清单:Alibaba/sentinel-springcloud-high/consumer_server/pom.xml
***
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
配置文件application.yml如下:
代码清单:Alibaba/sentinel-springcloud-high/consumer_server/src/main/resources/application.yml
***
server:
port: 9000
spring:
application:
name: spring-cloud-consumer-server
cloud:
nacos:
discovery:
server-addr: 192.168.44.129:8848
sentinel:
transport:
dashboard: localhost:8080
port: 8719
management:
endpoints:
web:
cors:
allowed-methods: '*'
feign:
sentinel:
enabled: true
这里使用feign.sentinel.enabled=true
开启Sentinel对Feign的支持。
接口测试类HelloController.java
代码清单:Alibaba/sentinel-springcloud-high/consumer_server/src/main/java/com/springcloud/consumer_server/controller/HelloController.java
***
@RestController
public class HelloController {
@Autowired
HelloRemote helloRemote;
@Autowired
RestTemplate restTemplate;
@GetMapping("/helloByFeign")
public String helloByFeign() {
return helloRemote.hello();
}
@GetMapping("/helloByRestTe