【SpringCloud微服务项目实战-mall4cloud项目(2)】——mall4cloud-gateway

news2024/10/6 18:23:01

mall4cloud-gateway网关模块

  • 系统架构与网关介绍
    • 网关介绍
  • 网关层代码
    • 依赖引入
    • bootstrap配置
    • nacos配置
      • gateway配置处理跨域问题
      • gateway路由断言配置
      • gateway路由过滤配置
  • 总结

代码地址
github地址
fork自github原始项目
gitee地址
fork自gitee原始项目

系统架构与网关介绍

在这里插入图片描述
从图中可以看到,在用户端和静态层通过接入层(nginx+防火墙)后就会到达后端服务中,首先要通过的便是网关层,网关层由springCloud gateway2+负载均衡去实现。

网关介绍

微服务架构中的网关层充当了微服务体系结构的门卫,负责处理请求、管理安全性、实施过滤和转换、执行路由和负载均衡等任务。通过集中管理这些功能,网关可以简化微服务的客户端访问,并提供一些关键的非业务功能,以确保整个系统的高可用性、性能和安全性。

请求路由:网关充当了所有进入微服务系统的请求的入口点。它基于一些预定义的规则,将请求路由到适当的微服务实例。这种路由可以基于请求的URI、HTTP方法、请求头、查询参数等条件进行。

负载均衡:网关可以与负载均衡器集成,以确保请求均匀地分发到多个微服务实例,从而提高系统的可用性和性能。这有助于避免单点故障,并有效地处理大量的请求。

安全性:网关层通常负责处理身份验证和授权,确保只有经过身份验证和授权的请求才能访问受保护的微服务。它可以集成单点登录(SSO)、OAuth、JWT验证等安全机制。

监控和日志:网关可以记录请求和响应的信息,以便进行监控和日志记录。这有助于跟踪系统性能问题、故障排除和安全审计。

过滤和转换:网关可以通过过滤器来处理请求和响应,执行一些非业务功能,例如请求和响应转换、请求重试、限流、缓存、数据加密等。这些过滤器可以在请求处理过程中添加、修改或删除请求和响应的部分内容。

版本控制和路由策略:网关层允许实施版本控制策略,使得不同版本的微服务可以并存,并且请求可以根据版本号路由到适当的微服务版本。

错误处理:网关可以处理微服务中的错误,并提供有意义的错误响应,而不是将内部错误暴露给客户端。

缓存:网关可以缓存常用的响应,从而减轻后端微服务的负担,提高响应时间。

限流:网关可以控制流量并限制对微服务的请求速率,以防止过多的请求导致系统过载。

网关层代码

依赖引入

在代码中的pom文件下。可以看到引入了如下主要依赖
在这里插入图片描述
①③:引入nacos的注册中心和配置中心依赖
②:引入loadbalancer依赖
④:引入gateway网关依赖

bootstrap配置

在这里插入图片描述
①:端口为8000
②:应用名称:从maven配置中读取为mall4cloud-gateway,在指定了名称后,如果不做配置,默认的配置文件名是mall4cloud-gateway.yaml,连接上配置中心后,会自动去获取这个默认的配置文件。
③:nacos的注册中心地址,端口8848
④:配置中心地址,引入了上一步的同样地址
⑤:使用默认的命名空间,
⑥:用于上面的shared-configs:application-dev.yml,从nacos获取这个配置
接下来看一下nacos的配置

nacos配置

application-dev.yml配置都是一些公共连接信息,就不说明了,以下是网关单独的配置。

spring:
  cloud:
    gateway:
      globalcors:
        cors-configurations:
          '[/**]':
            allow-credentials: true
            allowed-headers: "*"
            # 半个月内都允许
            max-age: 1296000
            # 测试环境,全部允许
            allowedOriginPatterns: "*"
            # allowedOrigins:
              # - "http://localhost:9527"
              # - "http://localhost:9527"
              # - "http://localhost:9528"
              # - "http://localhost:9529"
              # - "http://:9527"
            allowedMethods:
              - GET
              - POST
              - PUT
              - OPTIONS
              - DELETE
      discovery:
        locator:
          # 开启服务注册和发现
          enabled: true
          # 不手动写路由的话,swagger整合不了...

gateway配置处理跨域问题

spring.cloud.gateway.globalcors.cors-configurations: 这个配置项指定了CORS的配置信息,它是一个Map,其中键是URL匹配模式,值是CORS配置。
[/**]: 这是一个URL匹配模式,表示匹配所有的URL。这意味着这个CORS配置将应用于所有的请求路径。
allow-credentials: true: 允许在CORS请求中包含凭据信息,例如cookies或HTTP认证信息。
allowedOriginPatterns: * 允许的来源(域)模式。在测试环境中,设置为 * 表示允许任何来源。通常情况下,也可以使用 allowedOrigins 属性来指定具体的允许来源。
allowed-headers: * : 允许的请求头。在这里,* 表示允许任何请求头。
max-age: 1296000: 设置浏览器可以缓存CORS响应的时间,以秒为单位。在这里,设置为半个月(1296000秒)。也就是有效期内可以不经过cors请求直接访问
allowedMethods: 允许的HTTP请求方法,包括GET、POST、PUT、OPTIONS和DELETE等。

这个配置用于在Spring Cloud Gateway中配置全局的CORS规则,允许前端应用程序从任何来源(在测试环境中)访问网关的API,并允许包含凭据信息的请求。这有助于解决跨域请求的问题,使前端可以与后端的API进行跨域通信。

gateway路由断言配置

	routes:
        - id: mall4cloud-rbac
          uri: lb://mall4cloud-rbac
          predicates:
            - Path=/mall4cloud_rbac/**
          filters:
            - RewritePath=/mall4cloud_rbac(?<segment>/?.*), $\{segment}
        - id: mall4cloud-auth
          uri: lb://mall4cloud-auth
          predicates:
            - Path=/mall4cloud_auth/**
          filters:
            - RewritePath=/mall4cloud_auth(?<segment>/?.*), $\{segment}

routes: 网关路由配置
举例如下:
id为mall4cloud-rbac 的路由:为数组格式
id: mall4cloud-rbac:定义了这个路由的唯一标识符。
uri: lb://mall4cloud-rbac:指定了请求应该被路由到的目标服务的负载均衡地址。在这里,lb://mall4cloud-rbac 表示将请求路由到名为 mall4cloud-rbac 的服务,使用负载均衡器选择具体的实例。
predicates:定义了请求匹配规则,这里使用 Path属性,表示只有当请求的路径匹配 /mall4cloud_rbac/** 时,才会应用这个路由规则。才会路由到目标服务 lb://mall4cloud-rbac

通过网关访问登录接口结果如下:
在这里插入图片描述
与直接访问登录接口是一致的结果,也就是路由是成功的
在这里插入图片描述
上面的结果可以理解为/mall4cloud_rbac/** 路由到lb://mall4cloud-rbac服务
这里介绍一下常用的路由断言工厂,官网中有下面11中断言方式
在这里插入图片描述

gateway路由过滤配置

在Spring Cloud Gateway中,可以使用过滤器(Filters)来处理进入或离开网关的请求和响应。这些过滤器允许你在请求和响应的不同阶段执行各种操作,例如修改请求头、响应头、请求体,日志记录等。过滤器可以用于全局配置,也可以用于特定的路由规则
下面为项目的过滤器配置
在这里插入图片描述
filters:定义了一些路由过滤器,这里使用 RewritePath 过滤器,它将请求的路径进行重写。具体来说,它会将 /mall4cloud_rbac 后的路径部分提取出来并附加到目标服务的URI中,以实现请求路径的重写。

  • RewritePath:指定了要使用的过滤器工厂的名称,这里是重写请求路径的过滤器。
  • /mall4cloud_auth:这是要匹配的原始请求路径的一部分。如果请求的路径匹配这个部分,那么就会触发这个过滤器。
    (?/?.*):这是一个正则表达式捕获组,它用于捕获请求路径中 /mall4cloud_auth 后面的路径部分,并将其存储在一个名为 segment 的变量中。
  • ,${segment}:这是重写的目标路径的格式。它将原始请求路径中 /mall4cloud_auth 后面的路径部分添加到目标路径中。

举个例子,如果原始请求的路径是 /mall4cloud_auth/users,那么这个过滤器将把请求路径重写为 /users,并将请求路由到相应的后端服务。这样,请求路径的 /mall4cloud_auth 部分被移除了。

此外,spring还提供了多种过滤器工厂,举例如下:
在这里插入图片描述
其他各种可以根据具体需求设置过滤器,文档在gateway官方中查看:
在这里插入图片描述
也可以添加全局的过滤器,例如:
创建一个名为 MyGlobalFilter 的全局过滤器类,并继承GlobalFilter接口,实现filter方法来定义过滤逻辑,示例代码如下:

import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.stereotype.Component;
import reactor.core.publisher.Mono;

@Component
public class MyGlobalFilter implements GlobalFilter, Ordered {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        // 这里可以编写过滤逻辑,例如修改请求或响应
        return chain.filter(exchange); // 调用链中的下一个过滤器
    }

    @Override
    public int getOrder() {
        return 0; // 定义过滤器的执行顺序,0表示最高优先级
    }
}

总结

通过gateway网关,可以对项目进行处理请求、实施过滤和转换、执行路由和负载均衡,这些内容中,通常配置较多。如果项目有需求使用到gateway,可以根据网关的功能选取合适的方案实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1004381.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

企业为什么要做网络安全?

网络安全任何人都无法独善其身&#xff0c;无论个个人还是企业或者是高校、机构等&#xff0c;都需要参与到网络安全维护中。 在当今数字化时代&#xff0c;随着互联网的普及和企业信息化程度的提高&#xff0c;网络安全成为了企业运营中不可忽视的重要问题。网络安全指的是通过…

浅谈限流式保护器在高校防火工作的应用

安科瑞 华楠 【摘要】摘要&#xff1a;为了预防火灾和减少火灾带来的危害&#xff0c;保护校园和师生生命财产安全&#xff0c; 建和谐安宁的校园环境&#xff0c;保障学校安全稳定发展&#xff0c;我们必须要时刻拧紧消防安全这弦&#xff0c;时刻注意这根高压线。随着近年来…

RFID标签:实现固定资产全生命周期管理与极速盘点的利器

随着企业规模的扩大和业务的发展&#xff0c;固定资产管理变得越来越重要。然而&#xff0c;传统的手工管理方式往往效率低下、容易出错&#xff0c;无法满足现代企业对高效、准确管理的需求。在这样的背景下&#xff0c;RFID&#xff08;Radio Frequency Identification&#…

C++项目实战——基于多设计模式下的同步异步日志系统-⑦-日志输出格式化类设计

文章目录 专栏导读日志格式化类成员介绍patrernitems 格式化子项类的设计抽象格式化子项基类日志主体消息子项日志等级子项时间子项localtime_r介绍strftime介绍 源码文件名子项源码文件行号子项线程ID子项日志器名称子项制表符子项换行符子项原始字符串子项 日志格式化类的设计…

2100. 适合打劫银行的日子;2080. 区间内查询数字的频率;1774. 最接近目标价格的甜点成本

2100. 适合打劫银行的日子 核心思想&#xff1a;枚举前后缀。我们只需要预处理到第i天的前后缀&#xff0c;然后枚举一边i即可。最开始的时候我是分开求前后缀的&#xff0c;这里可以把前后缀一起进行处理。 2080. 区间内查询数字的频率 核心思想&#xff1a;二分。其实有一种…

Postman抓包网页请求

安装postman Interceptor谷歌插件 1.点击软件右下角Capture 2.启用代理 设置端口 3.手动点开谷歌插件&#xff0c;开始获取 4.获取结果可以点击进入详情页&#xff0c;查看接口信息

通过Python行命令搭建HTTP服务器结合内网穿透实现外网访问

文章目录 1.前言2.本地http服务器搭建2.1.Python的安装和设置2.2.Python服务器设置和测试 3.cpolar的安装和注册3.1 Cpolar云端设置3.2 Cpolar本地设置 4.公网访问测试5.结语 1.前言 Python作为热度比较高的编程语言&#xff0c;其语法简单且语句清晰&#xff0c;而且python有…

Vue项目中全局变量process的用法解析

一、什么是process process对象是一个全局变量&#xff0c;提供了有关当前Node.js进程的信息并对其进行控制。常用于Vue项目中环境区分&#xff0c;对不同环境的配置不同&#xff0c;例如&#xff1a;根据全局变量区分请求的url地址、是否开始eslint、不同环境的特殊配置等等。…

AiDB: 一个集合了6大推理框架的AI工具箱 | 加速你的模型部署

首发于GiantPandaCV公众号 项目地址: https://github.com/TalkUHulk/ai.deploy.box 网页体验: https://www.hulk.show/aidb-webassembly-demo/ PC: https://github.com/TalkUHulk/aidb_qt_demo Android: https://github.com/TalkUHulk/aidb_android_demo Go Server: https://gi…

[ Linux Audio 篇 ] 音频软件 Audacity 指导手册

音频软件 Audacity 指导手册 背景修订记录双声道提取到单声道查看频响特性查看增益导出Raw数据与作者沟通 背景 对于经常调试音频的开发人员来说&#xff0c;使用Audacity分析音频数据已经成为家常便饭。尤其对于日常使用Ubuntu / Linux等操作系统的开发人员来说&#xff0c;拥…

从构建者到设计者的低代码之路

低代码开发技术&#xff0c;是指无需编码或通过少量代码就可以快速生成应用程序的工具&#xff0c;一方面可降低企业应用开发人力成本和对专业软件人才的需求&#xff0c;另一方面可将原有数月甚至数年的开发时间成倍缩短&#xff0c;帮助企业实现降本增效、灵活迭代。那么&…

华为HCIA学习(一)

文章目录 一.根据考试题总结知识点&#xff08;一题一点&#xff09;二.上午学习三.下午学习四.今天只做了70题&#xff0c;需要的可以找我 一.根据考试题总结知识点&#xff08;一题一点&#xff09; 二.上午学习 ① VRP系统是VRP是华为公司从低端到高端的全系列路由器、交换…

MySQL数据库20G数据迁移至其他服务器的MySQL库或者云MySQL库

背景&#xff1a;20G的MySQL数据迁移至火山云MySQL库&#xff0c;使用navicat的数据传输工具迁移速度耗费时间过长。 方案一&#xff1a;使用火山云提供的MySQL数据迁移服务&#xff08;其他大厂应该提供的也有&#xff09; 方案二&#xff1a;使用数据迁移工具kettle&#x…

【记录贴】使用项目管理软件管理大型复杂项目是种什么体验?

随着手上的几个项目陆续验收交付&#xff0c;现在我又接了一个新项目&#xff0c;这次是一个中大型的软件开发项目。大型项目具有规模大、周期长、团队成员构成复杂、影响因素多等特征&#xff0c;所以我在项目推进过程中遇到了很多困难&#xff0c;想跟大家分享交流下&#xf…

深圳唯创知音电子将参加IOTE 2023第二十届国际物联网展•深圳站

​ 2023年9月20~22日&#xff0c;深圳唯创知音电子将在 深圳宝安国际会展中心&#xff08;9号馆9B1&#xff09;为您全面展示最新的芯片产品及应用方案&#xff0c;助力传感器行业的发展。 作为全球领先的芯片供应商之一&#xff0c;深圳唯创知音电子一直致力于为提供高质量、…

Python基于Flask的高校舆情分析,舆情监控可视化系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W,Csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 运行效果图 基于Python的微博大数据舆情分析&#xff0c;舆论情感分析可视化系统 系统介绍 微博舆情分析系…

Pytest系列-内置标签skip和skipif 跳过测试用例的详细使用(5)

简介 skip和skipif&#xff0c;见名知意就是跳过测试&#xff0c;主要用于不想执行的代码&#xff0c;标记后&#xff0c;标记的代码不执行。希望满足某些条件才执行某些测试用例&#xff0c;否则pytest会跳过运行该测试用例实际常见场景&#xff1a;根据平台不同执行测试、跳…

互联网医院系统|互联网医院监管平台的作用

互联网医院系统已经逐渐成为了人们就医、看病、买药等方面的重要选择。而这种新型医疗模式对传统医疗行业带来了巨大的冲击和变革。那么互联网医院系统为什么要对接监管平台呢&#xff1f;接下来小编就给大家介绍下。 一、政策必要性 根据《互联网医院管理办法&#xff08;试行…

【Linux环境】基础开发工具的使用:yum软件安装、vim编辑器的使用

​&#x1f47b;内容专栏&#xff1a; Linux操作系统基础 &#x1f428;本文概括&#xff1a; yum软件包管理、vim编辑器的使用。 &#x1f43c;本文作者&#xff1a; 阿四啊 &#x1f438;发布时间&#xff1a;2023.9.12 Linux软件包管理 yum 什么是软件包 在Linux下安装软件…

vue2+three.js实现宇宙(进阶版)

2023.9.12今天我学习了vue2three.js实现一个好看的动态效果&#xff1a; 首先是安装&#xff1a; npm install three 相关代码如下&#xff1a; <!--3d宇宙效果--> <template><div><div id"content" /></div> </template> <…