SpringCloudGateway 学习笔记 - 搭建项目

Posted 笑虾

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringCloudGateway 学习笔记 - 搭建项目相关的知识,希望对你有一定的参考价值。

SpringCloudGateway 学习笔记 - 搭建项目

创建项目

先用一个干净的 SpringBoot 项目。


什么都不用选,一直下一步到结束。

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 结点-->
<!--    <parent>-->
<!--        <groupId>com.jerry</groupId>-->
<!--        <artifactId>gateway-demo-parent</artifactId>-->
<!--        <version>0.0.1</version>-->
<!--    </parent>-->

    <groupId>com.jerry</groupId>
    <artifactId>gateway-demo</artifactId>
    <version>0.0.1</version>
    <name>$project.artifactId</name>
    <description>springGateway学习</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-boot.version>2.7.2</spring-boot.version>
        <nacos.version>2021.0.1.0</nacos.version>
        <spring-gateway.version>3.1.3</spring-gateway.version>
    </properties>

    <dependencies>
        <!-- SpringCloud Alibaba Nacos 服务注册发现,配置管理 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>$nacos.version</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>$nacos.version</version>
        </dependency>
        <!--启动时加载 bootstrap 配置-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
            <version>3.1.4</version>
        </dependency>
        
        <!-- SpringCloud Gateway -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
            <version>$spring-gateway.version</version>
        </dependency>
    </dependencies>

    <dependencyManagement>
    	<!-- 导入 SpringBoot 依赖 -->
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>$spring-boot.version</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
    	<!-- 配置打包名称 -->
        <finalName>$project.artifactId</finalName>
        <plugins>
        	<!-- spring-boot 打包插件 -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>$spring-boot.version</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

Nacos 不是必需的,单跑网关也可以。
将配置文件直接丢在 jar 同文件夹,jar 启动时也会优先于其内部的 application 加载。
但使用 Nacos 的好处在于,修改配置后,会直接生效,无需重启 gateway。

bootstrap.yml

bootstrap.yml 优先级高于 application.yml 启动相关的配置放这里。

# 网关端口
server:
  port: 9527
  
# Spring
spring:
  application:
    name: gateway-demo
  profiles:
    # 环境配置
    active: test
  cloud:
    nacos:
      discovery:
        # 服务注册地址
        server-addr: 127.0.0.1:8848
      config:
        # 配置中心地址
        server-addr: 127.0.0.1:8848
        # 配置文件格式
        file-extension: yml

看启动成功后会监听一下配置文件。
我在 Nacos 上创建 的DataID就是gateway-demo-test.yml

listening config: dataId=gateway-demo.yml, group=DEFAULT_GROUP
listening config: dataId=gateway-demo-test.yml, group=DEFAULT_GROUP
listening config: dataId=gateway-demo, group=DEFAULT_GROUP

application.yml

业务相关的配置放这里。
如果只是简单的统一API出口,那我们基本只要编辑这个配置文件就能实现了,一行代码都不用写。

spring:
  cloud:
    gateway:
      # 路由规则
      routes:
        # 路由的唯一标识,取名时尽量表明此条路由规则的用途。
        - id: all
          # order 值越小优先级越高
          order: 2
          # 所有路径转发到百度
          predicates:
            - Path=/**
          # 转发到:
          uri: http://www.baidu.com
        # 此路由用于匹配 /aaa 等几个路径并转发到 csdn
        - id: aaa
          order: 1
          # 匹配以下路径
          predicates:
            - name: Path
              args:
                # 匹配路径
                - /aaa
                - /aaa/xxx
                - /aaa123/xxx
                - /jx520
          # 转发到:
          uri: https://blog.csdn.net
        # 此路由用于匹配 /bbb 等几个路径并转发到 bilibili
        - id: bbb
          order: 1
          # 匹配以下路径
          predicates:
            - name: Path
              args:
                # 匹配路径
                - /bbb
                - /bbb/yyy
                - /bbb456/yyy
          # 转发到:
          uri: https://www.bilibili.com

routes 参数

属性说明
order值越小优先级越高。可以为负。

参考资料

Spring Cloud Gateway
笑虾:SpringCloudGateway 学习笔记 - yml 配置
笑虾:SpringCloudGateway 学习笔记 - 自定义过滤器 之 获取响应头

以上是关于SpringCloudGateway 学习笔记 - 搭建项目的主要内容,如果未能解决你的问题,请参考以下文章

SpringCloudGateway 学习笔记 - 搭建项目

SpringCloudGateway 学习笔记 - 自定义过滤器 之 获取响应头

SpringCloudGateway 学习笔记 - yml 配置

SpringCloudGateway 学习笔记 - 使用内置过滤器添加请求头响应头

SpringCloudGateway 学习笔记 - 使用内置过滤器添加请求头响应头

SpringCloudGateway 学习笔记 - 使用内置过滤器添加请求头响应头