码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【17-微服务网关之Spring Cloud Gateway&Spring Cloud Gateway网关服务搭建】


    一.知识回顾

    【0.三高商城系统的专题专栏都帮你整理好了,请点击这里!】
    【1-系统架构演进过程】
    【2-微服务系统架构需求】
    【3-高性能、高并发、高可用的三高商城系统项目介绍】
    【4-Linux云服务器上安装Docker】
    【5-Docker安装部署MySQL和Redis服务】
    【6-Git安装与配置过程、Gitee码云上创建项目、IDEA关联克隆的项目】
    【7-创建商城系统的子模块并将修改后的信息使用Git提交到Gitee上】
    【8-数据库表结构的创建&后台管理系统的搭建】
    【9-前端项目的搭建部署、Node安装、VSCode安装】
    【10-Node的安装以及全局环境变量的相关配置&解决启动报错的问题(1.Error: Cannot find module ‘fs/promises)(2.npm安装node-sass报错)】
    【11-导入人人generator项目并自动生成相关的文件&商品子模块的调试&公共模块common子模块的抽离与实现&Lombok插件的安装】
    【12-商品子模块整合MyBatisPlus技术&其它模块通过generator的自动生成与补充完善】
    【13-项目中微服务组件的学习-SpringCloudAlibaba微服务生态体系的学习&SpringCloudAlibaba的依赖管理&项目中SpringBoot和SpringCloud版本的统一】
    【14-微服务的注册中心与配置中心Nacos&Windows操作系统上安装Nacos和Linux操作系统上用Docker中安装Nacos&每个子项目模块使用Nacos进行服务注册与发现】
    【15-项目中服务的远程调用之OpenFeign&订单模块与商品模块集成使用OpenFeign的案例】
    【16-配置中心之Nacos的基本使用&Nacos服务之命令空间、Nacos服务之配置组、Nacos服务之配置拆分】

    二.微服务网关Gateway

    Spring Cloud GateWay官网手册地址

    5.5.1 网关基本介绍

      在微服务架构里,服务的粒度被进一步细分,各个业务服务可以被独立的设计、开发、测试、部署和管理。这时,各个独立部署单元可以用不同的开发测试团队维护,可以使用不同的编程语言和技术平台进行设计,这就要求必须使用一种语言和平台无关的服务协议作为各个单元间的通讯方式。

    在这里插入图片描述

      本系统中我们选择的是Gateway作为我们的网关组件,Spring Cloud Gateway是Spring官方基于Spring 5.0,Spring Boot 2.0和Project Reactor等技术开发的网关,Spring Cloud Gateway旨在为微服务架构提供一种简单而有效的统一的API路由管理方式。Spring Cloud Gateway作为Spring Cloud生态系中的网关,目标是替代ZUUL,其不仅提供统一的路由方式,并且基于Filter链的方式提供了网关基本的功能,例如:安全,监控/埋点,和限流等。

    网关由三个部分组成:
    在这里插入图片描述

    • Route(路由):这是网关的基本构建块,它由一个ID,一个目标URI,一组断言和一组过滤器定义,如果断言为真,则路由匹配
    • Predicate(断言):是Java8中提供的函数式接口,用来判断是否路由匹配的
    • Filter(过滤器):对断言匹配的请求和响应进行修改处理

    路由断言工厂的分类:

    全局过滤器分类:
    在这里插入图片描述

    三.Spring Cloud Gateway网关服务搭建

    创建一个mall-gateway网关的模块
    在这里插入图片描述

    创建网关API服务,修改SpringBoot和SpringCloud相关版本和其他的微服务保持一致。然后添加对应的依赖

            <dependency>
                <groupId>com.ljw.mallgroupId>
                <artifactId>mall-commonsartifactId>
                <version>0.0.1-SNAPSHOTversion>
            dependency>
            <dependency>
                <groupId>org.springframework.cloudgroupId>
                <artifactId>spring-cloud-starter-gatewayartifactId>
            dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    因为网关服务路由的时候需要去注册中心中发现相关的服务所以需要完成Nacos注册中心的配置

    # 注册中心的配置
    spring.application.name=mall-gateway
    spring.cloud.nacos.discovery.server-addr=ip地址:8848
    
    # 指定注册中心的服务端口
    server.port=8070
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    主启动类放开注册中心的发现注解
    在这里插入图片描述

    配置网关的服务注册中心

    在这里插入图片描述

    配置网关Nacos的配置中心

    在这里插入图片描述

    application.yml配置文件进行路由的配置

    # 注册中心的配置
    spring:
      application:
        name: mall-gateway
      cloud:
        nacos:
          discovery:
            server-addr: Nacos服务的IP地址:8848
        gateway:
          routes:
            - id: route1
              uri: http://www.baidu.com
              predicates:
                - Query=url,baidu
            - id: route2
              uri: http:www.jd.com
              predicates:
                - Query=url,jd
    server:
      port: 8070
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    启动时候因为依赖的commons服务中有MyBatis的依赖,那么在网关API服务中也需要数据源的相关配置,那么没有就抛异常,对应如下的解决方案:

    1. gateway的pom文件中引入commons模块的相关依赖排除我们数据库的相关依赖;
    2. 这时我们可以在启动类的SpringBootApplication注解中排除DataSourceAutoConfiguration的自动注入。
    /**
     * TODO:网关和我们的数据库没有关系,所以再启动的时候排除相关的依赖
     * @SpringBootApplication(exclude = DataSourceAutoConfiguration.class)  
     */
    @EnableDiscoveryClient
    @SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
    public class MallGatewayApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(MallGatewayApplication.class, args);
        }
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述

    然后根据对应的路由规则测试即可:

    http://localhost:8070/?url=baidu
    在这里插入图片描述

    http://localhost:8070/?url=jd
    在这里插入图片描述

    好了,关于【17-微服务网关之Spring Cloud Gateway&Spring Cloud Gateway网关服务搭建】就先学习到这里,更多内容持续创作更新中,敬请期待。

  • 相关阅读:
    Spring自带的这11个工具类,真香!
    【如何查看Python安装了哪些包】
    【蓝牙协议】简介:蓝牙芯片、蓝牙协议架构
    【英语:基础进阶_核心词汇扩充】E5.常见词根拓词
    车联网白皮书(2021.12)中国信息通信研究院
    QT基础篇目录
    NLP 04(GRU)
    JTabbedPane 右键标题关闭选项卡
    Redis的性能管理
    聚观365|抖音上线“防打扰保护工具”;亚马逊拟计划裁员1万人
  • 原文地址:https://blog.csdn.net/Coder_ljw/article/details/127928252
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号