08 Spring Cloud Alibaba

创建统一的依赖管理

创建一个工程名为 spring-cloud-alibaba-dependencies 的项目,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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.8.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.chanshiyu</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <name>spring-cloud-alibaba-dependencies</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

        <!-- Spring Settings -->
        <spring-cloud.version>Greenwich.SR2</spring-cloud.version>
        <spring-cloud-alibaba.version>2.1.0.RELEASE</spring-cloud-alibaba.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Greenwich.SR2</version>
                <type>${spring-cloud.version}</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>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <mainClass>com.chanshiyu.nacosprovider.NacosProviderApplication</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

服务注册与发现

服务注册与发现使用 Nacas,直接启动即可。

服务提供者

创建服务提供者

创建一个工程名为 spring-cloud-alibaba-nacos-provider 的项目,pom.xml 配置文件如下:

Application

通过 @EnableDiscoveryClient 注解表明是一个 Nacos 客户端,该注解是 Spring Cloud 提供的原生注解。

application.yml

测试服务

服务消费者

使用 LoadBalanceClientRestTemplate 结合的方式来访问。创建一个工程名为 spring-cloud-alibaba-nacos-consumer 的项目,pom.xml 配置文件如下:

Application

application.yml

Configuration

测试服务

服务消费者(Feign)

创建服务消费者

创建一个工程名为 spring-cloud-alibaba-nacos-consumer-feign 的项目,pom.xml 配置文件如下:

Application

通过 @EnableFeignClients 注解开启 Feign 功能:

application.yml

测试服务

创建 Service:

创建 Controller:

熔断器

阿里巴巴开源了 Sentinel 组件,实现了熔断器模式,Spring Cloud 对这一组件进行了整合。

添加依赖

application.yml

fallback

service

仪表盘监控

启动 sentinel 控制台。修改 application.yml,添加 sentinel 配置:

路由网关

创建路由网关

创建一个工程名为 spring-cloud-alibaba-nacos-gateway 的项目,pom.xml 配置文件如下:

需要注意:

  • Spring Cloud Gateway 不使用 Web 作为服务器,而是 使用 WebFlux 作为服务器,Gateway 项目已经依赖了 starter-webflux,所以这里 千万不要依赖 starter-web

  • 由于过滤器等功能依然需要 Servlet 支持,故这里还需要依赖 javax.servlet:javax.servlet-api

Application

application.yml

过滤器

最后更新于

这有帮助吗?