欢迎光临散文网 会员登陆 & 注册

java架构师高端课微服务_07_SpringCloud_Gateway

2020-07-06 18:28 作者:自学Python的小姐姐呀  | 我要投稿

主要内容

Spring Cloud Gateway简介

使用Spring Cloud Gateway实现路由功能

使用Spring Cloud Gateway实现过滤器功能

使用Spring Cloud Gateway实现熔断功能

学习目标

Spring Cloud Gateway

一、 Spring Cloud Gateway简介

概述

Spring cloud gateway是spring官方基于Spring 5.0、Spring Boot2.0和Project Reactor等技术开发的网关,Spring Cloud Gateway旨在为微服务架构提供简单、有效和统一的API路由管理方式,Spring Cloud Gateway作为Spring Cloud生态系统中的网关,目标是替代Netflix Zuul,其不仅提供统一的路由方式,并且还基于Filer链的方式提供了网关基本的功能,例如:安全、监控/埋点、限流等。

核心概念

2.1 API网关

API 网关出现的原因是微服务架构的出现,不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信,会有以下的问题:

客户端会多次请求不同的微服务,增加了客户端的复杂性。

存在跨域请求,在一定场景下处理相对复杂。

认证复杂,每个服务都需要独立认证。

难以重构,随着项目的迭代,可能需要重新划分微服务。例如,可能将多个服务合并成一个或者将一个服务拆分成多个。如果客户端直接与微服务通信,那么重构将会很难实施。

某些微服务可能使用了防火墙 / 浏览器不友好的协议,直接访问会有一定的困难。

 

以上这些问题可以借助 API 网关解决。API 网关是介于客户端和服务器端之间的中间层,所有的外部请求都会先经过 API 网关这一层。也就是说,API 的实现方面更多的考虑业务逻辑,而安全、性能、监控可以交由 API 网关来做,这样既提高业务灵活性又不缺安全性

使用API网关后示意图:

使用 API 网关后的优点如下:

易于监控。可以在网关收集监控数据并将其推送到外部系统进行分析。

易于认证。可以在网关上进行认证,然后再将请求转发到后端的微服务,而无须在每个微服务中进行认证。

统一接入。减少了客户端与各个微服务之间的交互次数。

2.2 路由

路由是网关最基础的部分,路由信息有一个ID、一个目的URL、一组断言和一组Filter组成。如果断言路由为真,则说明请求的URL和配置匹配。

2.3 过滤器

一个标准的Spring webFilter。Spring cloud gateway中的filter分为两种类型的Filter,分别是Gateway Filter和Global Filter。过滤器Filter将会对请求和响应进行修改处理。执行示意图如下:

如上图所示,Spring cloudGateway发出请求。然后再由Gateway Handler Mapping中找到与请求相匹配的路由,将其发送到Gateway web handler。Handler再通过指定的过滤器链将请求发送到我们实际的服务执行业务逻辑,然后返回。

三、 使用Spring Cloud Gateway实现路由功能

入门案例

1.1 创建Gateway项目

1.1.1 POM文件

1.1.2 配置文件

1.1.3 启动类

2  配置文件手工绑定路由规则

2.1 POM文件

不需要修改。

2.2 配置文件

2.3 启动类

不需要修改。

三、 使用Spring Cloud Gateway实现过滤器功能

Spring Cloud gateway的filter分为两种:GatewayFilter和Globalfilter。GlobalFilter会应用到所有的路由上,而Gatewayfilter将应用到单个路由或者一个分组的路由上。

多个过滤器会根据配置文件中的定义来决定执行顺序。

如果提供的自定义过滤器实现了Ordered接口,则可以通过接口中的方法getOrder来决定执行顺序。具体顺序由getOrder方法返回结果升序排列。

Spring Cloud Gateway内置过滤器

GatewayFilter是一个接口,通过查看源码,其有很多实现类,不同的实现类实现不同的过滤功能。具体如下:

常用过滤器有:

AddRequestParameterGatewayFilterFactory - 在指定请求中增加请求参数的过滤器。

AddRequestHeaderGatewayFilterFactory - 在指定请求中增加请求头参数的过滤器。

StripPrefixGatewayFilterFactory - 在指定请求中处理路径前缀的过滤器。

在Gateway中使用过滤器的方式非常简单,只要在配置文件中通过过滤器命名前缀即可快速使用,如使用AddRequestParameterGatewayFilterFactory,可以通过AddRequestParameter在配置文件中配置使用;如使用StripPrefixGatewayFilterFactory,可以通过StripPrefix在配置文件中配置使用。

具体配置过程如下:

2  自定义过滤器

2.1 自定义GatewayFilter - 网关过滤器

2.1.1 自定义过滤器


2.1.2 配置文件

2.2 自定义GlobalFilter - 全局过滤器

GlobalFilter:全局过滤器,不需要在配置文件中配置,作用在所有的路由上,最终通过GatewayFilterAdapter包装成GatewayFilterChain可识别的过滤器,它为请求业务以及路由的URI转换为真实业务服务的请求地址的核心过滤器,不需要配置,系统初始化时加载,并作用在每个路由上。

全局过滤器无需创建工厂类,也无需在配置文件中进行注册。因为其对所有的网关代理的路径都生效。


2.2.1 自定义过滤器

四、 使用Spring Cloud Gateway实现熔断功能

Spring Cloud Gateway也可以利用Hystrix的熔断特性,在流量过大时进行服务降级。

POM依赖

2  熔断处理代码

3  配置文件

4   启动类








java架构师高端课微服务_07_SpringCloud_Gateway的评论 (共 条)

分享到微博请遵守国家法律