Spring Cloud(七) Gateway
Spring Cloud Gateway
Gateway简介
Gateway为SpringBoot应用提供了API网关支持,具有强大的智能路由与过滤器功能,是Spring Cloud的第二代网关组件。
Gateway是在Spring生态系统之上构建的API网关服务,基于Spring 5.0、Spring Boot 2和Project Reactor等技术。
Gateway旨在提供一种简单有效的方式来对API进行路由以及提供一些强大的过滤器功能,例如:熔断、限流、重试等。
Gateway基于Spring 5.0的新特性WebFlux进行开发,底层网络通信框架使用的是Netty,所以其吞吐量高、性能强劲。
Gateway特性
Spring Cloud Gateway具有如下特性:
- 基于基于Spring 5、Spring Boot 2和Project Reactor进行构建;
- 动态路由:能够匹配任何请求属性;
- 集成Spring Cloud服务发现组件自动转发请求,默认集成Ribbon做负载均衡,默认集成Hystrix的断路器功能网关进行保护;
- 易于编写Predicate(断言)和Filter(过滤器)并对路由指定
- 请求限流,支持路径重写
- 性能强劲,功能强大,设计优雅,易于扩展。
Gateway核心概念
Route(路由)
路由是构建网关的基本模块,它由ID、目标URL、一系列的断言和过滤器组成。如果断言为true,则匹配该路由。
Predicate(断言)
Java 8的Function Predicate。输入类型是Spring框架中ServerWebExchange。开发人员可以匹配HTTP请求中的所有内容,例如请求头或请求参数。如果请求与断言相匹配,则进行路由。
Filter(过滤器)
指的是Spring框架中GatewayFilter的实例。使用过滤器,可以在请求被路由前后对请求以及响应数据进行修改,同时可以利用Filter实现授权、访问日志记录、接口耗时记录等功能。
Spring Cloud架构图
Gateway Client发送请求给Spring Cloud Gateway,Gateway Handler Mapping会判断请求路径是否匹配路由的配置,如果匹配则会进入Gateway Web Handler,Gateway Web Handler会读取路由上所有配置的过滤器,然后将该请求交给过滤器处理,最后转发到路由配置的微服务上。
整合Gateway网关服务
创建api-gateway模块
添加依赖
1 | <dependencies> |
添加配置文件
1 | server: |
添加启动类
1 |
|
配置路由(两种不同的方式)
Gateway提供了两种不同方式用于路由的配置,一种是通过yml文件来配置,另一种是通过Java Bean来配置。
使用yml文件配置
修改配置文件:
1 | server: |
使用Java Bean配置
1 |
|
路由过滤器
给请求添加请求头的过滤器
在BookController获取请求头并输出
测试
控制打印