一 问题
- 如果没有网关的话,假如说前端工程师要直接连接成百上千的微服务,如果后端给ip端口改了,前端还得跟着动.这样极大增加了前端的工作量.
- API网关作用就是把各个服务对外提供的API汇聚起来,让外界看起来是一个统一的接口。同时也可在网关中提供额外的功能。
- 分布式服务架构、微服务架构与 API 网关:
在微服务架构里,服务的粒度被进一步细分,各个业务服务可以被独立的设计、开发、测试、部署和管理。这时,各个独立部署单元可以用不同的开发测试团队维护,可以使用不同的编程语言和技术平台进行设计,这就要求必须使用一种语言和平 台无关的服务协议作为各个单元间的通讯方式。
- 使用了网关的话,前端直接连接网关,然后根据网关的配置去Nacos里面获取对应的服务器地址去调用.
前端只需要在前端代码里面配置网关的地址就行了,不管你后端怎么改服务的ip和端口,这样前端的工作量就大大的降低了.
总结:网关就是所有项目的一个统一入口。
二 介绍
Spring Cloud Gateway是Spring官方基于Spring 5.0,Spring Boot 2.0和Project Reactor等技术开发的网关,Spring Cloud Gateway旨在为微服务架构提供一种简单而有效的统一的API路由管理方式。Spring Cloud Gateway作为Spring Cloud生态系中的网关,目标是替代ZUUL,其不仅提供统一的路由方式,并且基于Filter链的方式提供了网关基本的功能,例如:安全,监控/埋点,和限流等。
三 特性
Spring Cloud Gateway具有以下特性。
- 动态路由:能匹配任何请求属性
- 集成Hystrix的断路器功能
- 集成 Spring Cloud 服务发现功能(Nacos)
- 有 Predicate(断言)和 Filter(过滤器)功能,极易编写
- 请求限流功能
- 支持路径重写
四 核心概念
- 断言(Predicate):参照 Java8 的新特性Predicate,允许开发人员匹配 HTTP 请求中的任何内容,比如请求头或请求参数,最后根据匹配结果返回一个布尔值。
- 路由(route):由ID、目标URI、断言集合和过滤器集合组成。如果聚合断言结果为真,则转发到该路由。
- 过滤器(filter):可以在返回请求之前或之后修改请求和响应的内容。
五 路由断言工厂
路由断言工厂描述
内置:
1.基于时间DateTime类型的断言工厂
2.基于Cookie的断言工厂
3.基于请求头的断言工厂
4.基于域名的断言工厂
5.基于请求方法的断言工厂
6.基于Path路径的断言工厂
7.基于请求参数的断言工厂
8.根据请求客户端Ip的断言工厂
9.根据权重
自定义路由断言工厂:
自定义路由断言工厂需要继承AbstractRoutePredicateFactory类,重写apply()方法的逻辑。在apply()方法中可以通过exchange.getRequest()拿到ServerHttpReqeust对象,从而可以获取到请求参数、请求方式、请求头等信息。
六 过滤器
1 局部过滤器
内置:
自定义:
- 继承AbstractNameValueGatewayFilterFactory抽象类
- 自定义名称必须以GatewayFilterFactory结尾
- 还必须注册进spring容器中