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

这篇具有很好参考价值的文章主要介绍了【SpringCloud微服务项目实战-mall4cloud项目(2)】——mall4cloud-gateway。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

系统架构与网关介绍

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

网关介绍

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

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

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

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

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

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

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

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

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

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

网关层代码

依赖引入

在代码中的pom文件下。可以看到引入了如下主要依赖
mall4cloud,mall4cloud,SpringCloud,微服务,spring cloud,微服务,gateway
①③:引入nacos的注册中心和配置中心依赖
②:引入loadbalancer依赖
④:引入gateway网关依赖

bootstrap配置

mall4cloud,mall4cloud,SpringCloud,微服务,spring cloud,微服务,gateway
①:端口为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,mall4cloud,SpringCloud,微服务,spring cloud,微服务,gateway
与直接访问登录接口是一致的结果,也就是路由是成功的
mall4cloud,mall4cloud,SpringCloud,微服务,spring cloud,微服务,gateway
上面的结果可以理解为/mall4cloud_rbac/** 路由到lb://mall4cloud-rbac服务
这里介绍一下常用的路由断言工厂,官网中有下面11中断言方式
mall4cloud,mall4cloud,SpringCloud,微服务,spring cloud,微服务,gateway

gateway路由过滤配置

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

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

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

此外,spring还提供了多种过滤器工厂,举例如下:
mall4cloud,mall4cloud,SpringCloud,微服务,spring cloud,微服务,gateway
其他各种可以根据具体需求设置过滤器,文档在gateway官方中查看:
mall4cloud,mall4cloud,SpringCloud,微服务,spring cloud,微服务,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,可以根据网关的功能选取合适的方案实现。文章来源地址https://www.toymoban.com/news/detail-803545.html

到了这里,关于【SpringCloud微服务项目实战-mall4cloud项目(2)】——mall4cloud-gateway的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringCloud_微服务基础day1(走进微服务,认识springcloud,微服务(图书管理)项目搭建(一))

    官方网站:柏码 - 让每一行代码都闪耀智慧的光芒! (itbaima.net) 注意: 此阶段学习推荐的电脑配置,至少配备4核心CPU(主频3.0Ghz以上)+16GB内存,否则卡到你怀疑人生。 前面我们讲解了SpringBoot框架,通过使用SpringBoot框架,我们的项目开发速度可以说是得到了质的提升。同时

    2024年02月07日
    浏览(36)
  • Mall4j开源商城系统-基于SpringBoot+Vue系统开发介绍

    Mall4j开源商城,一个基于spring boot、spring oauth2.0、mybatis、redis的轻量级、前后端分离、防范xss攻击、拥有分布式锁,为生产环境多实例完全准备,数据库为b2b2c设计,拥有完整sku和下单流程的开源商城。 目录  今天来介绍一款非常不错的Mall4j开源商城系统​编辑 一、序言 二、

    2024年04月10日
    浏览(37)
  • Jenkins+Docker+SpringCloud微服务持续集成项目优化和微服务集群

    基于 Jenkins+Docker+SpringCloud微服务持续集成 作优化 上面部署方案存在的问题: 一次只能选择一个微服务部署 只有一台生产者部署服务器 每个微服务只有一个实例,容错率低 优化方案: 在一个Jenkins工程中可以选择多个微服务同时发布 在一个Jenkins工程中可以选择多台生产服务

    2024年02月13日
    浏览(33)
  • 6个顶级SpringCloud微服务开源项目,企业开发必备

    今天介绍六款比较热门的SpringCloud微服务项目,感兴趣的可以clone下来研究一下,相信对你学习微服务架构很有帮助。 介绍 Cloud-Platform是国内首个基于Spring Cloud微服务化开发平台,具有统一授权、认证后台管理系统,其中包含具备用户管理、资源权限管理、网关API 管理等多个

    2024年02月03日
    浏览(40)
  • 关于如何将一个springcloud项目部署至服务器

    目录 1.部署形式 2.Alibaba Cloud Toolkit的使用 3.一个springcloud项目的部署 4.运行jar包 5.后台运行 一般我们在后端开发中,常常将整个springboot项目打包成war包,或是打包成一个jar包,再将其使用ssh工具传输至服务器中,执行即可。 但是springcloud项目属于微服务框架,是由一个父工程

    2023年04月16日
    浏览(28)
  • GitHub上最火的SpringCloud微服务商城系统项目,附全套教程

    ├── mall-admin – 后台管理系统服务 ├── mall-search – 基于Elasticsearch的商品搜索系统服务 ├── mall-portal – 移动端商城系统服务 └── mall-demo – 微服务远程调用测试服务 项目地址及项目教程 ============= 转发+关注,然后私信回复 “源码” 即可获得《项目地址及

    2024年04月11日
    浏览(33)
  • springcloud微服务项目,通过gateway+nacos实现灰度发布(系统不停机升级)

    灰度发布的目的是保证系统的高可用,不停机,提升用户体验。在微服务系统中,原有系统不下线,新版系统与原有系统同时在线,通过访问权重在线实时配置,可以让少量用户先应用新版本功能,如果用户反馈存在问题,则下线新系统;如果反馈良好,则逐步加大新系统的

    2024年04月28日
    浏览(25)
  • 黑马头条 SpringBoot+SpringCloud+ Nacos等企业级微服务架构项目

    各位爷,完整项目gitee如下,求star heima-leadnews-master: 《黑马头条》项目采用的是SpringBoot+springcloud当下最流行的微服务为项目架构,配合spring cloud alibaba nacos作为项目的注册和配置中心。新课程采用快速开发的模式,主要解决真实企业开发的一些应用场景。详情请看博客:htt

    2024年02月08日
    浏览(45)
  • 《黑马头条》SpringBoot+SpringCloud+ Nacos等企业级微服务架构项目

    各位爷,完整项目gitee如下,求star heima-leadnews-master: 《黑马头条》项目采用的是SpringBoot+springcloud当下最流行的微服务为项目架构,配合spring cloud alibaba nacos作为项目的注册和配置中心。新课程采用快速开发的模式,主要解决真实企业开发的一些应用场景。详情请看博客:htt

    2024年02月15日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包