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

Spring Cloud Gateway详解

一、前言Spring Cloud Gateway的作用

  1. 路由转发
    • Spring Cloud Gateway作为微服务架构中的网关服务,充当所有请求的入口。
    • 它可以根据请求的路径、Host、Header、请求参数等多种条件进行路由,将请求转发到相应的微服务实例。
    • 路由信息由ID、目的URL、断言工厂和Filter组成,为微服务提供了统一的路由方式。
  2. 负载均衡
    • 通过集成服务注册中心(如Eureka),Spring Cloud Gateway可以实现微服务的负载均衡。
    • 根据负载均衡策略,Gateway可以将请求分发到不同的微服务实例,确保服务的高可用性和性能。
  3. 熔断和降级
    • 支持熔断器模式,当微服务出现故障或超时时,Gateway可以进行熔断,避免故障扩散。
    • 同时支持降级策略,当某个微服务出现故障时,可以通过返回默认值或其他备选方案来提供优雅降级。
  4. 限流
    • 通过配置限流规则,Gateway可以限制对某个微服务的并发请求量或请求数量,防止微服务被过载。
    • 这有助于保护后端服务免受恶意攻击和过载请求的影响。
  5. 安全认证
    • 可以集成Spring Security等框架,提供安全认证和权限控制的功能,保护微服务免受未经授权的访问。
    • 提供了灵活的鉴权机制,可以根据请求的路径、方法、头部信息等来进行鉴权控制。
  6. 其他功能
    • 支持日志监控,记录请求和响应的详细信息,帮助开发人员进行故障排查和性能优化。
    • 提供丰富的Filter链,可以自定义实现各种网关功能,如参数校验、权限校验、流量监控等。

二、Spring Cloud Gateway详解

  • 路由(Route)

    路由是网关最基础的部分,它由一个 ID,一个目标 URI,一组断言和一组过滤器定义。如果断言为真,则路由匹配。

  • 断言(Predicate)

    Java8 中的断言函数。Spring Cloud Gateway 中的断言函数输入类型是 Spring 5.0 框架中 的 ServerWebExchange。Spring Cloud Gateway 中的断言函数允许开发者去定义匹配来自于 Http Request 中的任 何信息,比如请求头和参数等。

  • 过滤器(Filter)

    一个标准的 Spring Web Filter。Spring Cloud Gateway 中的 Filter 分为两种类型,分别是 Gateway Filter 和 Global Filter。过滤器将会对请求和响应进行处理。

三、工作原理

Clients make requests to Spring Cloud Gateway. If the Gateway Handler Mapping determines that a request matches a route, it is sent to the Gateway Web Handler. This handler runs the request through a filter chain that is specific to the request. The reason the filters are divided by the dotted line is that filters can run logic both before and after the proxy request is sent. All “pre” filter logic is executed. Then the proxy request is made. After the proxy request is made, the “post” filter logic is run.

四、在springboot中的配置文件

#应用ID
app:id: xxx-project-plat#端口
server:port: 8300#服务名称  
spring:application:name: base-gatewaycloud:gateway:discovery:locator:enabled: false # 这个配置是默认给每个服务创建一个router,设置为false防止请求默认转发到url中包含的微服务名上#例:/auth/**会默认转发到服务auth下,而不是转发到配置的urilower-case-service-id: true # 微服务名称以小写形式呈现routes:- id: base-admin #微服务路由规则uri: lb://base-admin #负载均衡,将请求转发到注册中心的base-adminpredicates: #断言,如果前端请求包含/base-admin/,则走这条规则- Path=/base-admin/**filters: # 过滤器 /base-admin/** 转发到 uri/**- StripPrefix=1- id: project-businessuri: lb://project-businesspredicates:- Path=/project-business/**filters: # /project-business/** 转发到 uri/**- StripPrefix=1
#spring boot 升级到2.6.x后需要增加的配置main:allow-circular-references: truemvc:pathmatch:matching-strategy: ANT_PATH_MATCHER#注册到eureka注册中心
eureka:instance:prefer-ip-address: trueinstance-id: ${spring.cloud.client.ip-address}:${server.port}client:service-url:defaultZone: ${app.eureka.defaultZone}#集成apollo配置中心
apollo:bootstrap:enabled: truenamespaces: application,txyunjdbc.yml,redis.yml,ctgproject.yml,weixin.yml,cloudflashpay.ymlmeta: http://project-config:8080management:endpoint:gateway:enabled: trueendpoints:web:exposure:include: gateway  #禁止外界访问 Spring Cloud Gateway actuator 端点
#日志级别配置        
logging:level:root: INFOcn.ctg.project.dao: DEBUG

相关文章:

  • BIO NIO AIO 的区别!!!
  • 【Oracle生产运维】表空间利用率不足处理
  • RabbitMQ-工作模式(Topics模式RPC模式Publisher Confirms模式)
  • docker使用auth登录
  • LeetCode | 26.删除有序数组中的重复项
  • 【深度学习】深度学习之巅:在 CentOS 7 上打造完美Python 3.10 与 PyTorch 2.3.0 环境
  • 【问题解决】HttpURLConnection如何以POST的方式发送请求,传递form表单格式的数据到外部接口
  • AIGC之MetaHuman:HeyGen(基于AI驱动的视频生成平台+数字人)的简介、安装和使用方法、案例应用之详细攻略
  • C#开源软件:OneNote组件oneMore轻松打造自己的公众号编辑器
  • python如何判断变量是否是字符串
  • 基于springboot高校就业招聘系统的设计
  • 如何将jpg图像添加文字并转换成无压缩的dicom图像
  • 前端传递bool型后端用int收不到
  • ubuntu18.04离线源制作
  • qmt量化交易策略小白学习笔记第16期【qmt编程之获取北向南向资金(沪港通,深港通和港股通)】
  • [nginx文档翻译系列] 控制nginx
  • 2017届校招提前批面试回顾
  • Flannel解读
  • Java超时控制的实现
  • Mysql优化
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • Terraform入门 - 3. 变更基础设施
  • Xmanager 远程桌面 CentOS 7
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 安装python包到指定虚拟环境
  • 高性能JavaScript阅读简记(三)
  • 工程优化暨babel升级小记
  • 老板让我十分钟上手nx-admin
  • 突破自己的技术思维
  • 应用生命周期终极 DevOps 工具包
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • ​Python 3 新特性:类型注解
  • #etcd#安装时出错
  • #Lua:Lua调用C++生成的DLL库
  • #Z0458. 树的中心2
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (C)一些题4
  • (java)关于Thread的挂起和恢复
  • (二)hibernate配置管理
  • (二开)Flink 修改源码拓展 SQL 语法
  • (离散数学)逻辑连接词
  • (六)软件测试分工
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (南京观海微电子)——示波器使用介绍
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (十六)串口UART
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (转)创业家杂志:UCWEB天使第一步
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .net core开源商城系统源码,支持可视化布局小程序
  • .Net 垃圾回收机制原理(二)