Version
cloud-alibaba-2024 版本控制
版本日志
名称 版本 Java 17 Maven 3.8.1 Spring Boot 2.6.15 Spring Cloud 2021.0.9 Spring Cloud Alibaba 2021.0.6.0 Nacos Server 2.3.2 pom.xml
指向原始笔记的链接 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.study</groupId> <artifactId>cloud-alibaba-2024</artifactId> <version>1.0</version> <packaging>pom</packaging> <description>学习 Spring Cloud Alibaba</description> <modules> <module>nacos-provider-9001</module> <module>nacos-consumer-9003</module> <module>nacos-config-9004</module> </modules> <properties> <java.version>17</java.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <spring-boot.version>2.6.15</spring-boot.version> <spring-cloud.version>2021.0.9</spring-cloud.version> <spring-cloud-alibaba.version>2021.0.6.0</spring-cloud-alibaba.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring-boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>${spring-cloud-alibaba.version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>17</source> <target>17</target> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> </build> <repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> </project>
1. 引入依赖
sentinel
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</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-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
2. 添加配置
配置控制台信息
spring:
cloud:
sentinel:
transport:
port: 8091
dashboard: 127.0.0.1:8090
这里的 spring.cloud.sentinel.transport.port
端口配置会在应用对应的机器上启动一个 Http Server,该 Server 会与 Sentinel 控制台做交互。比如 Sentinel 控制台添加了一个限流规则,会把规则数据 push 给这个 Http Server 接收,Http Server 再将规则注册到 Sentinel 中。
更多 Sentinel 控制台的使用及问题参考: Sentinel 控制台文档 以及 Sentinel FAQ
开启 Feign 支持
feign.sentinel.enabled=true
feign:
sentinel:
enabled: true
Note
Feign 对应的接口中的资源名策略定义:httpmethod:protocol://requesturl。
@FeignClient
注解中的所有属性,Sentinel 都做了兼容。
application.yml
server:
port: 9005
spring:
application:
name: sentinel-consumer
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
sentinel:
transport:
port: 8091
dashboard: 127.0.0.1:8090
feign:
sentinel:
enabled: true
3. FeignClient
FeignService
@FeignClient(name = "provider", path = "/provider", fallbackFactory = FeignFallbackFactory.class)
public interface FeignService {
@GetMapping(value = "/env/getServerPort")
String searchRepo();
}
FeignFallbackFactory
@Component
public class FeignFallbackFactory implements FallbackFactory<FeignFallback> {
@Override
public FeignFallback create(Throwable cause) {
return new FeignFallback();
}
}
FeignFallback
public class FeignFallback implements FeignService {
@Override
public String searchRepo() {
return "fallback";
}
}
4. 生产者
以上是消费者的代码,接下来是生产者: 创建子模块 nacos-provider-9001
5. Sentinel 控制台
请求消费者的接口,刷新控制台页面,即可看到监控信息。
踩坑记录
版本一定要对应!!!
今天下午反复调试都无法成功,原因竟是版本问题:
- Spring Cloud 2022.0.0-RC2
- Spring Cloud Alibaba 2022.0.0.0-RC2
晚上根据 Spring Boot 与 Spring Cloud Alibaba 版本对应关系,重新修改版本,其他代码无改动,测试成功!
- Spring Cloud 2022.0.0
- Spring Cloud Alibaba 2022.0.0.0
启示:版本一定要对应!!!少走弯路!
Reference