Spring Cloud Alibaba [Gateway]网关。

embedded/2024/11/20 7:52:45/

1 简介

        网关作为流量的入口,常用功能包括路由转发、权限校验、限流控制等。而springcloudgateway 作为SpringCloud 官方推出的第二代网关框架,取代了Zuul网关。

1.1 SpringCloudGateway特点:

(1)基于Spring5,支持响应式编程和SpringBoot2.0

(2)支持使用任何请求属性进行路由匹配

(3)特定于路由的断言和过滤器

(4)集成Hystrix进行断路保护

(5)集成服务发现功能

(6)易于编写Predicates和Filters

(7)支持请求速率限制与路径重写

2 核心概念 

2.1 路由

路由是网关最基础的部分,路由信息有一个ID、一个目的URL、一组断言和一组 Filter 组成。如果断言路由为真,则说明请求的URL和配置匹配 

2.2 断言

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

2.3 过滤器

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

3 工作原理

                                        

        客户端发送请求给网关,网关收到请求,并HandlerMapping判断是否请求满足路由,满足就发给网关的WebHandler。WebHandler 将请求交给一个过滤器链,请求到达目标服务之前,会执行所有过滤器的pre方法。请求到达目标服务处理之后再依次执行所有过滤器的post方法。

一句话:满足某些断言(predicates)就路由到指定的地址(uri),使用指定的过滤器(filter)

4 Gateway的集成

4.1 pom引入依赖

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

4.2 添加配置文件

spring:cloud:gateway:routes:
#        - id: test_route
#          uri: https://www.baidu.com
#          predicates:
#            - Query=url,baidu
#
#        - id: qq_route
#          uri: https://www.qq.com
#          predicates:
#            - Query=url,qq#        - id: product_route
#          uri: lb://gulimall-product
#          predicates:
#            - Path=/api/product/**
#          filters:
#            - RewritePath=/api/(?<segment>.*),/$\{segment}
#
#        - id: third_party_route
#          uri: lb://gulimall-third-party
#          predicates:
#            - Path=/api/thirdparty/**
#          filters:
#            - RewritePath=/api/thirdparty/(?<segment>.*),/$\{segment}
#
#        - id: member_route
#          uri: lb://gulimall-member
#          predicates:
#            - Path=/api/member/**
#          filters:
#            - RewritePath=/api/(?<segment>.*),/$\{segment}
#
#        - id: ware_route
#          uri: lb://gulimall-ware
#          predicates:
#            - Path=/api/ware/**
#          filters:
#            - RewritePath=/api/(?<segment>.*),/$\{segment}
#
#        - id: admin_route
#          uri: lb://renren-fast
#          predicates:
#            - Path=/api/**
#          filters:
#            - RewritePath=/api/(?<segment>.*),/renren-fast/$\{segment}## 前端项目,/api
## http://localhost:88/api/captcha.jpg   http://localhost:8080/renren-fast/captcha.jpg
## http://localhost:88/api/product/category/list/tree http://localhost:10000/product/category/list/tree

4.3 注意 

gateway中配置uri配置有三种方式,包括
        第一种:ws(websocket)方式: uri: ws://localhost:8808
        第二种:http方式: uri: http://www.baidu.com
        第三种:lb(注册中心中服务名字)方式: uri: lb://microname 

4.3.1 规则1

        各种Predicates同时存在于同一个路由时,请求必须同时满足所有的条件才被这个路 由匹配。

4.3.2 规则2

        一个请求满足多个路由的谓词条件时,请求只会被首个成功匹配的路由转发

4.4 断言(Predicates)

4.5 过滤器(filters)


http://www.ppmy.cn/embedded/139014.html

相关文章

微服务网关聚合swagger(knife4j版本)

前言 简单集成&#xff0c;最小的依赖及配置&#xff0c;采取默认为主 步骤 依赖<dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-gateway-spring-boot-starter</artifactId><version>4.4.0</version> &…

面向对象编程的局限性与适用场景分析

文章目录 1. 性能敏感的应用2. 简单的脚本或小型程序3. 资源受限的环境4. 高并发场景5. 功能单一的应用6. 需要高度定制化和灵活性的应用7. 数据密集型计算8. 需要严格控制内存的应用结论 1. 性能敏感的应用 限制原因&#xff1a; 对象实例化开销&#xff1a;面向对象编程中&…

【支持向量机(SVM)】:算法原理及核函数

文章目录 1 SVM算法原理1.1 目标函数确定1.2 约束条件优化问题转换1.3 对偶问题转换1.4 确定超平面1.5 计算举例1.6 SVM原理小节 2 SVM核函数2.1 核函数的作用2.2 核函数分类2.3 高斯核函数2.3 高斯核函数API2.4 超参数 γ \gamma γ 1 SVM算法原理 1.1 目标函数确定 SVM思想…

力扣题解3243 新增道路查询后的最短距离 I

题目&#xff1a; 给你一个整数 n 和一个二维整数数组 queries。 有 n 个城市&#xff0c;编号从 0 到 n - 1。初始时&#xff0c;每个城市 i 都有一条单向道路通往城市 i 1&#xff08; 0 < i < n - 1&#xff09;。 queries[i] [ui, vi] 表示新建一条从城市 ui 到城市…

【前端学习笔记】Javascript学习二(运算符、数组、函数)

一、运算符 运算符&#xff08;operator&#xff09;也被称为操作符&#xff0c;是用于实现赋值、比较和执行算数运算等功能的符号。 JavaScript中常用的运算符有&#xff1a; 算数运算符、递增和递减运算符、比较运算符、逻辑运算符、赋值运算符 算数运算符&#xff1a; 、-…

刷题训练之深搜(DFS)-----(二叉树的所有路径,全排列,子集)

二叉树的所有路径 给你一个二叉树的根节点 root &#xff0c;按 任意顺序 &#xff0c;返回所有从根节点到叶子节点的路径。 题目分析&#xff1a; 题目要我们找到一个课的所有路径&#xff0c;就是要找到从根节点到每一个叶子节点的路径 终止条件就是当遇到叶子节点的时候 用…

【RabbitMQ】10-抽取MQ工具

1. Nacos共享配置 shared-mq.yaml spring:rabbitmq:host: ${hm.mq.host:*.*.*.*} # 你的虚拟机IPport: ${hm.mq.port:5672} # 端口virtual-host: ${hm.mq.vhost:/hmall} # 虚拟主机username: ${hm.mq.un:hmall} # 用户名password: ${hm.mq.pw:***} # 密码2. Common包下引入依…

Flutter开发者进阶:接入安卓原生页面

Flutter开发者进阶&#xff1a;接入安卓原生页面 前言 在 Flutter APP 的开发过程中&#xff0c;有时不仅需要使用 Flutter 提供的组件&#xff0c;还需要使用原生的组件。 例如在对接外部 SDK 时&#xff0c;如果自己重新实现 SDK 的逻辑&#xff0c;无疑是本末倒置。 在这…