当前位置: 首页 > news >正文

SpringCloudGateway 学习笔记 - 搭建项目

SpringCloudGateway 学习笔记 - 搭建项目

  • 创建项目
  • pom.xml 依赖
  • bootstrap.yml
  • application.yml
    • routes 参数
  • 参考资料

创建项目

先用一个干净的 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 学习笔记 - 自定义过滤器 之 获取响应头

相关文章:

  • MySQL学习笔记:一条SQL语句的执行过程
  • Springboot框架建立(1)
  • mongodb数据模型设计
  • Java学习笔记:SQLite数据库
  • 通过mockjs生成随机响应数据
  • VGG16-好莱坞明星识别
  • 《运营商劫持, 中间人攻击, 黑客入侵怎么办?》- HTTPS 技术反制
  • Vue项目的记录(七)
  • 【云原生 • Kubernetes】集群资源监控概述、监控平台的搭建
  • SpringCloud Stream基本使用
  • 没有CANdela,无法编辑cdd数据库文件,也能轻松完成诊断测试,立省大二十个w
  • 【Linux】基本指令 (下篇)
  • 博途PLC的模糊PID(Matlab “fuzzy“工具箱使用介绍)
  • 【Vue 开发实战】实战篇 # 45:如何构建可交互的组件文档让代码高亮的显示在页面
  • m分别通过matlab和FPGA实现基于高阶循环谱的信号载波调制识别(四阶循环累量)仿真(包括仿真录像,matlab工程,fpga工程)
  • 收藏网友的 源程序下载网
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • Android组件 - 收藏集 - 掘金
  • axios 和 cookie 的那些事
  • ECS应用管理最佳实践
  • ES10 特性的完整指南
  • JSONP原理
  • node学习系列之简单文件上传
  • Vue ES6 Jade Scss Webpack Gulp
  • Vue.js-Day01
  • vue--为什么data属性必须是一个函数
  • 分类模型——Logistics Regression
  • 关于 Cirru Editor 存储格式
  • 马上搞懂 GeoJSON
  • 使用common-codec进行md5加密
  • 无服务器化是企业 IT 架构的未来吗?
  • 小程序button引导用户授权
  • 移动端唤起键盘时取消position:fixed定位
  • ​MySQL主从复制一致性检测
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #pragma once与条件编译
  • (1)SpringCloud 整合Python
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (离散数学)逻辑连接词
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (转)甲方乙方——赵民谈找工作
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • .“空心村”成因分析及解决对策122344
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .NET6 开发一个检查某些状态持续多长时间的类
  • .NetCore 如何动态路由
  • .net流程开发平台的一些难点(1)
  • [ 云计算 | AWS 实践 ] 基于 Amazon S3 协议搭建个人云存储服务
  • [AutoSAR系列] 1.3 AutoSar 架构
  • [BZOJ2850]巧克力王国
  • [C\C++]读入优化【技巧】
  • [C语言][C++][时间复杂度详解分析]二分查找——杨氏矩阵查找数字详解!!!