Spring Cloud Gateway
随着微服务开发与使用越来越广泛,单组件服务也越来越多,导致服务的维护变得复杂,试想如果使用nginx作为负载均衡,当服务增加一个就需要重新配置nginx,这样就使得项目的维护成本与难度越来越高,于是网关在微服务开发中就成为了也不可或缺的存。
网关可以作为服务的统一入口,封装应用程序的内部结构,客户端提供统一服务,一些与也无无关的公共逻辑也可以放在网关实现,如认证、鉴权、监控、路由转发等。
本文就Spring Cloud Gateway记录一下我自己的学习笔记。
Spring Cloud Gateway 功能特征
- 动态路由:能够匹配任何请求属性;
- 支持路径重写;
- 集成 Spring Cloud 服务发现功能(Nacos、Eruka);
- 可集成流控降级功能(Sentinel、Hystrix);
- 可以对路由指定易于编写的 Predicate(断言)和 Filter(过滤器);
核心概念
- 路由(route)
路由是网关中最基础的部分,路由信息包括一个ID、一个目的URI、一组断言工厂、一组Filter组成。如果断言为真,则说明请求的URL和配置的路由匹配。
- 断言(predicates)
Java8中的断言函数,SpringCloud Gateway中的断言函数类型是Spring5.0框架中的ServerWebExchange。断言函数允许开发者去定义匹配Http request中的任何信息,比如请求头和参数等。
- 过滤器(Filter)
SpringCloud Gateway中的filter分为Gateway FilIer和Global Filter。Filter可以对请求和响应进行处理。
执行流程
- Gateway Client向Gateway Server发送请求
- 请求首先会被HttpWebHandlerAdapter进行提取组装成网关上下文
- 然后网关的上下文会传递到DispatcherHandler,它负责将请求分发给RoutePredicateHandlerMapping
- RoutePredicateHandlerMapping负责路由查找,并根据路由断言判断路由是否可
- 如果过断言成功,由FilteringWebHandler创建过滤器链并调用
- 请求会一次经过PreFilter–微服务–PostFilter的方法,最终返回响应
Spring Cloud Gateway快速开始
环境搭建
1.引入依赖
1 | <!-- gateway网关 --> |
2.简单使用
1 | server: |
集成Nacos
引入依赖
1 | <!-- nacos服务注册与发现 --> |
编写yml文件
1 | server: |
路由断言工厂(Route Predicate Factories)配置
作用: 当请求gateway的时候, 使用断言对请求进行匹配, 如果匹配成功就路由转发, 如果匹配失败就返回404
类型:内置,自定义
SpringCloudGateWay包含有许多内置的断言工厂,这些断言都与HTTP请求的不同属性匹配。
- 基于Datetime类型的断言工厂
- 基于远程地址的断言工厂
- 基于Cookie的断言工
- 基于Header的断言工厂
- 基于Host的断言工厂
- 基于Method请求方法的断言工厂
- 基于Path请求路径的断言工厂
- 基于Query请求参数的断言工厂
- 基于路由权重的断言工厂
自定义路由断言工厂
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 陆柒!
评论
