网站首页 > java教程 正文
Spring Cloud网关
微服务架构把臃肿的服务拆分为多个服务进行治理。在这种情况下,有多个服务就会有多个接口和多个域名,这会造成客户端访问的混乱等问题。网关可方便地对多个微服务接口进行管理,对客户端提供统一的服务入口,同时还可以对鉴权、限流和降级进行控制。本章主要讲解Spring Cloud网关的使用方法。
API网关
API网关本身也是一个服务。作为一种微服务的统一入口,API网关不仅为客户端提供接口,而且还增加了一些功能,如权限管理、指标监控、限流、降级、缓存及负载均衡等。简而言之,网关为客户端提供统一的访问入口,并做一些非业务的逻辑处理。
网关简介
当前常见的API主要有基于OpenResty的Kong、基于Go语言开发的Tyk、基于Netflix开源的Zuul及Spring Cloud出品的Spring Cloud网关。本节主要介绍Spring Cloud网关。
API网关作为业务网关,可以定制与扩展,一般包含以下功能和特性:
性能:具有高可用、负载均衡和容错机制等特性。
安全:提供权限认证。
全链路日志:可以进行全链路调用系统分析。
缓存:返回数据缓存。
监控:进行QPS和响应时间等的信息监控。
限流:进行流量限流控制。
降级:进行系统降级与熔断。
路由:提供动态路由规则。
Spring Cloud网关提供了一个基于Spring 5、Spring Boot 2.x和Project Reactor等技术的API网关,旨在为微服务架构提供一种简单、有效的方式对接口进行路由调用,并提供安全、监控、埋点和限流等方面的功能。Spring Cloud网关是基于Spring WebFlux框架实现的,而Spring WebFlux框架的底层是基于Reactor模式的Netty框架。
Spring Cloud网关的主要特性如下:
基于Spring 5、Spring Boot 2.x及Project Reactor进行架构。
集成Hystrix断路器。
集成服务发现。
集成Actuator API。
提供动态路由规则。
可以进行限流。
提供Predicates和Filters规则。
下面介绍Spring Cloud网关中的3个重要概念。
Route(路由):Spring Cloud网关的基本组成模块。Route模块是由一个ID、目标URI、一组断言和一组过滤器来定义的,如果断言为真,则路由匹配,目标URI就会被访问。
Predicate(断言):从Java 8以后提供了断言函数。SpringCloud网关中的断言函数的输入类型是ServerWebExchange,该函数允许开发者定义来自于HTTP请求中的任何信息,如请求头和参数等。
Filter(过滤器):Spring Framework GatewayFilter的实例,由特定工厂生成,可以对请求和响应进行修改。
Spring Cloud网关的架构如图9.1所示
从图9.1中可以看到,客户端首先向Spring Cloud网关发出请求,然后在Gateway Handler Mapping中找到与请求相匹配的路由,将其发送给Gateway Web Handler进行处理,Gateway Web Handler再通过指定的Filter Chain将请求发送给代理服务执行业务逻辑,最终将结果返回。过滤器可能会在发送代理服务之前(pre)或之后(post)执行过滤逻辑。
网关示例
配置断言与过滤器一般有两种方式,一种是快捷方式,另一种是全展开参数方式。下面分别给出两种官方示例。
下面的例子使用快捷方式定义一个Cookie断言,其中有两个参数,表示Cookie名称的是mycookie, Cookie的值为mycookievalue。
spring:
cloud:
gateway:
routes:
-id: after_route
uri: https://example.org
predicates:
-Cookie=mycookie,mycookievalue
下面的例子使用全展开参数的方式配置断言,其类似于标准的YAML配置方式。本例提供了name key和args key,其中,args key的值是一个map类型的参数。
spring:
cloud:
gateway:
routes:
-id: after_route
uri: https://example.org
predicates:
-name: Cookie
args:
name: mycookie
regexp: mycookievalue
猜你喜欢
- 2025-09-06 16.3K Star!简洁高效的Java权限认证与会话管理框架——Sa-Token
- 2025-09-06 27 | API网关:系统的门面要如何做呢?
- 2025-09-06 微服务网关—Zuul1.0和2.0我们该如何选择?
- 2025-09-06 微服务API聚合网关 An Aggregation API Gateway
- 2025-09-06 springCloud网关Zuul和GateWay区别
- 2025-09-06 你在配置 Spring Boot3 网关过滤器时,是不是也常困惑?一文解决!
- 2025-09-06 网关如何实现高可用?_网关范围如何设置
- 2025-09-06 Gateway_gateway官网
- 2025-09-06 四大案例让你了解英特尔物联网网关解决方案
- 2025-09-06 SpringCloud系列——10Spring Cloud Gateway网关
你 发表评论:
欢迎- 最近发表
-
- 如何优雅地记录操作日志?_操作日志怎么实现
- 开发利器丨如何使用ELK设计微服务中的日志收集方案?
- Java应用日志如何与Jaeger的trace关联
- Springboot强大的日志功能你真的了解吗?这些功能你肯定不知道
- 深入探索 Spring Boot3 中日志的自定义封装处理操作
- SpringBoot+Kafka+ELK 完成海量日志收集(超详细)
- SpringBoot中统一日志管理_springboot日志每天一个文件
- 16.3K Star!简洁高效的Java权限认证与会话管理框架——Sa-Token
- 27 | API网关:系统的门面要如何做呢?
- 微服务网关—Zuul1.0和2.0我们该如何选择?
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)