Spring Cloud Gateway 网关组件及搭建实例
创始人
2024-03-12 03:30:58
0

Spring Cloud Gateway 是 Spring Cloud 团队基于 Spring 5.0、Spring Boot 2.0 和 Project Reactor 等技术开发的高性能 API 网关组件。Spring Cloud Gateway 旨在提供一种简单而有效的途径来发送 API,并为它们提供横切关注点,例如:安全性,监控/指标和弹性。

Spring Cloud Gateway 是基于 WebFlux 框架实现的,而 WebFlux 框架底层则使用了高性能的 Reactor 模式通信框架 Netty。它最主要的功能就是路由转发,在定义转发规则时主要涉及以下三个核心概念:

  • Route(路由)—— 网关最基本的模块。它由一个 ID、一个目标 URI、一组断言(Predicate)和一组过滤器(Filter)组成。
  • Predicate(断言)—— 路由转发的判断条件,可以通过 Predicate 对 HTTP 请求进行匹配,例如请求方式、请求路径、请求头、参数等,如果请求与断言匹配成功,则将请求转发到相应的服务。
  • Filter(过滤器)—— 过滤器,可以使用它对请求进行拦截和修改,还可以使用它对上文的响应进行再处理。

工作流程

  1. 客户端将请求发送到 Spring Cloud Gateway 上。
  2. Spring Cloud Gateway 通过 Gateway Handler Mapping 找到与请求相匹配的路由,将其发送给 Gateway Web Handler。
  3. Gateway Web Handler 通过指定的过滤器链(Filter Chain),将请求转发到实际的服务节点中,执行业务逻辑返回响应结果。
  4. 过滤器之间用虚线分开是因为过滤器可能会在转发请求之前(pre)或之后(post)执行业务逻辑。
  5. 过滤器(Filter)可以在请求被转发到服务端前,对请求进行拦截和修改,例如参数校验、权限校验、流量监控、日志输出以及协议转换等。
  6. 过滤器可以在响应返回客户端之前,对响应进行拦截和再处理,例如修改响应内容或响应头、日志输出、流量监控等。
  7. 响应原路返回给客户端。
    在这里插入图片描述

动态路由

默认情况下,Spring Cloud Gateway 会根据服务注册中心(例如 Eureka Server)中维护的服务列表,以服务名(spring.application.name)作为路径创建动态路由进行转发,从而实现动态路由功能。

可以在配置文件中,将 Route 的 uri 地址修改为形式 lb://service-name

  • lb:uri 的协议,表示开启 Spring Cloud Gateway 的负载均衡功能。
  • service-name:服务名,Spring Cloud Gateway 会根据它获取到具体的微服务地址。
 routes:- id: provider_dept_list_routh   #路由 id,没有固定规则,但唯一uri: lb://MICROSERVICECLOUDPROVIDERDEPT #动态路由,使用服务名代替具体端口

过滤器

Spring Cloud Gateway 提供了以下两种类型的过滤器,可以对请求和响应进行精细化控制。按照作用范围又可以划分为GatewayFilter、GlobalFilter

  • Pre 类型:这种过滤器在请求被转发到微服务之前可以对请求进行拦截和修改,例如参数校验、权限校验、流量监控、日志输出以及协议转换等操作。
  • Post 类型:这种过滤器在微服务对请求做出响应后可以对响应进行拦截和再处理,例如修改响应内容或响应头、日志输出、流量监控等。
 filters:- AddRequestParameter=X-Request-Id,1024# 过滤器工厂会在匹配的请求头加上一对请求头,名称为 X-Request-Id,值为 1024- PrefixPath=/dept # 在请求路径前面加上 /dept

搭建实例

  1. 在项目 pom.xml 中引入Spring Cloud Gateway依赖(Gateway官方案例)

    
    
    org.springframework.cloudspring-cloud-starter-gateway
    
    
  2. 配置 application.yml 文件

    test:#  hostport: httpbin.org:80#  hostport: localhost:5000#  uri: http://${test.hostport}#  uri: lb://httpbinuri: http://localhost:8001spring:jmx:enabled: falsecloud:gateway:default-filters:# - PrefixPath=/httpbin- PrefixPath=/dept- AddResponseHeader=X-Response-Default-Foo, Default-Barroutes:# =====================================# to run server# $ wscat --listen 9000# to run client# $ wscat --connect ws://localhost:8080/echo- id: websocket_testuri: ws://localhost:9000order: 9000predicates:- Path=/echo- id: websocket_testuri: ws://localhost:8001order: 9000predicates:- Path=/dept# =====================================- id: default_path_to_httpbinuri: ${test.uri}order: 10000predicates:- Path=/**logging:level:org.springframework.cloud.gateway: TRACEorg.springframework.http.server.reactive: DEBUGorg.springframework.web.reactive: DEBUGreactor.ipc.netty: DEBUGreactor.netty: DEBUGmanagement.endpoints.web.exposure.include: '*'server:port: 9527
    
  3. Http Restful Demo 测试

    1、服务提供者请求连接 http://localhost:8001/dept/list?uname=123
    2、gateway网关请求转发 http://localhost:9527/list?uname=123
    

在这里插入图片描述

  1. Websocket Demo 测试

    1. test Demo
    wscat -l 9000	# 在本地9000端口启动websocket服务监听
    ws://localhost:9527/echo	# 使用postman测试收发信息情况
    

在这里插入图片描述

  2. test1 Demows://localhost:8001/dept/test/websocket   # 服务提供者请求连接ws://localhost:9527/test/websocket	# gateway网关请求转发

在这里插入图片描述
在这里插入图片描述


参考链接
1、Github : spring-cloud/spring-cloud-gateway
2、Gateway集成WebSocket 实现前后端通信
3、推荐一个websocket测试工具:wscat
4、spring cloud gateway-filter的那些事
5、SpringCloud gateway (史上最全)

相关内容

热门资讯

美国2年期国债收益率上涨15个... 原标题:美国2年期国债收益率上涨15个基点 美国2年期国债收益率上涨15个基...
汽车油箱结构是什么(汽车油箱结... 本篇文章极速百科给大家谈谈汽车油箱结构是什么,以及汽车油箱结构原理图解对应的知识点,希望对各位有所帮...
嵌入式 ADC使用手册完整版 ... 嵌入式 ADC使用手册完整版 (188977万字)💜&#...
重大消息战皇大厅开挂是真的吗... 您好:战皇大厅这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游戏...
盘点十款牵手跑胡子为什么一直... 您好:牵手跑胡子这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游...
senator香烟多少一盒(s... 今天给各位分享senator香烟多少一盒的知识,其中也会对sevebstars香烟进行解释,如果能碰...
终于懂了新荣耀斗牛真的有挂吗... 您好:新荣耀斗牛这款游戏可以开挂,确实是有挂的,需要了解加客服微信8435338】很多玩家在这款游戏...
盘点十款明星麻将到底有没有挂... 您好:明星麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【5848499】很多玩家在这款游戏...
总结文章“新道游棋牌有透视挂吗... 您好:新道游棋牌这款游戏可以开挂,确实是有挂的,需要了解加客服微信【7682267】很多玩家在这款游...
终于懂了手机麻将到底有没有挂... 您好:手机麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游戏...