Version

cloud-alibaba-2024 版本控制

版本日志

名称版本
Java17
Maven3.8.1
Spring Boot2.6.15
Spring Cloud2021.0.9
Spring Cloud Alibaba2021.0.6.0
Nacos Server2.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

启示:版本一定要对应!!!少走弯路!