• 【微服务】GateWay概念与使用


    一、API 网关功能:
    1. 路由到指定位置:后台管理系统经常给各个服务发送请求,某一个服务掉线了,我们不可能手动去修改端口号,让它去其他机器找。因此,需要 API 网关,让其帮助我们将请求路由到正确位置。
    2. 进行鉴权等操作:网关也能帮助我们进行鉴权,网关层可对统一的请求进行处理。

    二、SpringCloud GateWay 简介

    GateWay 网关是 SpringCloud 官方推出并维护的网关中间件,其具有优越的性能,得到了业内的广泛肯定,我们在项目中也使用其作为我们的网关。

    1. 基本概念
    • 路由(Route): 我们发请求给网关,网关帮我们路由到指定位置
    • 断言(Predicate):请求发给 API 网关,API 网关进行条件判断路由到指定位置,这个条件判断就是断言
    • 过滤器(Filter): 请求过来,先进行过滤,在过滤器中,可对请求进行修改。
    1. 工作流程
      在这里插入图片描述

    上图总结:
    请求到达网关,网关利用断言判断请求是否符合路由规则,若符合,路由到指定地方。在路由到指定地方的过程中需要进行一系列的过滤器进行过滤。


    三、SpringCloud GateWay 的使用

    在本节主要介绍如何实现使用 SpringBoot 框架整合 GateWay 实现到路由到指定位置

    1. 启动 Nacos 服务器 —— 对Nacos 不熟悉的建议移步到 Nocas的使用

    2. 新建一微服务模块,添加 GateWay 依赖,并开启服务的注册发现

    • 使用 Spring Initializr 新建微服务模块,勾选添加 GateWay 依赖

    在这里插入图片描述

    • 通过在 SpringBoot 项目启动类中加入 @EnableDiscoveryClient 注释,开启服务的注册与发现
    1. 配置 Nocos 注册中心地址

    新建 bootstrap.properties 文件,加入如下配置

    spring.application.name=mall-gateway # 此处添加你的项目名
    spring.cloud.nacos.config.server-addr=127.0.0.1:8848 # 此处添加你的 Nacos 服务器地址
    spring.cloud.nacos.config.namespace=2e7e2d21-70fd-4e1c-b24e-a1c9c94e63b4 # 此处添加你为该网关服务新建的命名空间 id (不重要,根据你的情况绝对要不要新建命名空间,不写使用使用默认的命名空间)
    
    • 1
    • 2
    • 3
    1. 启动项目,在 application.yml 配置文件中编写如下断言进行测试
    spring:
      cloud:
        gateway:
          routes:
            - id:  baidu_route # 当前路由的 id
              uri: https://www.baidu.com # 路由到的地址
              predicates: # 路由断言,满足该断言才能路由到指定位置(断言为数组,因此使用 -)
                - Query=url, baidu # Query 断言要求包含参数 url, 并且参数值匹配正则表达式
                
            - id: qq_route # 测试二
              uri: https://www.qq.com
              predicates:
                - Query=url, qq
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在浏览器中输入如下 url 进行测试,表示包含参数url,并且参数的值为 baidu (注:我的项目启动端口号是 88, 你根据自己的启动端口号写就 ok )

    在这里插入图片描述


    踩坑:

    1. 报错:
      Parameter 0 of method modifyRequestBodyGatewayFilterFactory in org.springframework.cloud.gateway.config.GatewayAutoConfiguration required a bean of type ‘org.springframework.http.codec.ServerCodecConfigurer’ that could not be found.

    2. 解决方式:
      该错误是由于 gateway 和 spring-webmvc 不兼容导致的,在 pom 文件依赖中去掉 spring-webmvc 依赖,如果是引入的全局依赖,使用如下方式排除 spring-webmvc 即可

    		<dependency>
    			<groupId>com.wanqing.mallgroupId>
    			<artifactId>mall-commonartifactId>
    			<version>0.0.1-SNAPSHOTversion>
    			<exclusions>
    				<exclusion>
    						<groupId>org.springframeworkgroupId>
    						<artifactId>spring-webmvcartifactId>
    				exclusion>
    			exclusions>
    		dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    尾注: 蓝色是象征冷静的颜色,在一段时间的苦痛之后,我仿佛又活过来了,这一路,感谢支持我鼓励我的人陪伴,让我们大家一起加油!一个人的力量和渺小,但是一群人可以改变时间。当然回到这篇文章,如果有不明白的问题,欢迎大家评论交流,我看见了就会回复的,谢谢大家**


  • 相关阅读:
    函数 lpad、rpad 不支持 length 函数运算改写
    【日拱一卒行而不辍20220919】自制操作系统
    Elasticsearch 8.X 路径检索的企业级玩法
    小侃设计模式(十一)-享元模式
    stylegan3相关代码报错解决
    迪文科技工业串口屏(DMG10600C070-03WTC)更新程序烧录刷机
    分拣设备运动仿真
    Mybatis @MapKey注解返回指定Map源码解析与用例
    Linux 安全 - Credentials
    【代码源每日一题】饿饿 饭饭「二分答案」
  • 原文地址:https://blog.csdn.net/liuwanqing233333/article/details/127981980