【Springcloud】详解Zuul(API网关)

在这里插入图片描述
今天我们说说Springcloud的另一个组件——Zuul。其就像一个城堡的大门,如果想进入城堡,必须经过它的“导航”和“过滤”。

Zuul是什么?

Zuul是API网关,存在于前端和后端之间,所有的前端请求访问都需要经过它来调度和过滤。它提供了路由、服务器负载均衡、安全等功能。
在这里插入图片描述

路由详解

路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础。路由配置分为传统路由配置和服务路由配置。今天我们只说说服务路由配置。

路由配置方式

zuul.routes.user-service=/user-service/**

路径匹配

为路由规则定义匹配表达式使用的是Ant风格,示例如下。

//拼接一个任务字符的路径
/user-service/?

//拼接任意字符的路径
/user-service/*

//拼接多级的任意字符路径
/user-service/**

路由前缀

路由前缀就是全局地为路由规则增加前缀信息,可使用zuul.prefix参数来进行设置。

zuul.prefix=/api

本地跳转

我们可实现forward形式的服务端跳转配置,比如以下实现了将符合/api-b/**规则的请求转发到API网关中以/local为前缀的请求上,由API网关进行本地处理。

zuul.routes.api-b.path=/api-b/**
zuul.toutes.api-b.url=forward:/local
过滤器详解

过滤器功能负责对请求的处理过程进行干预,是实现请求校验、服务聚合等功能的基础。每一个进入Zuul的HTTP请求都会经过一系列的过滤器处理链得到请求响应,并返回给客户端。

请求生命周期

当一个HTTP请求到达API网关之后,如何在各种不同类型的过滤器之间流转呢?

(1)pre阶段
在这个阶段,请求会被pre类型的过滤器进行处理,做一些前置加工。这类过滤器包括请求的校验等。
(2)routing阶段
这是路由请求转发阶段,也就是将外部请求转发到具体服务实例上去的过程。当服务实例将请求结果都返回之后,此阶段完成。
(3)post阶段
在此阶段中,我们可以对处理结果进行一些加工或转换等
(4)error阶段
当前三个阶段发生异常时,才会触发这个error阶段。但是它最后也是流向post阶段,因为它需要通过post过滤器将最终结果返回给请求客户端。

禁用过滤器

比如我们想禁用AccessFilter过滤器,可在配置文件中添加如下配置:

zuul.AccessFilter.pre.disable=true
动态加载

动态加载就是在不重启服务的前提下,对其动态修改路由规则、添加或删除过滤器等。

动态路由

如果想实现动态刷新路由规则的功能,只需将API网关服务的配置文件通过Config连接的Git仓库存储和管理即可。

扫描二维码关注公众号,回复: 8681490 查看本文章

动态过滤器

如果想实现此功能,需要借助基于JVM实现的动态语言的帮助,比如Groovy。

发布了258 篇原创文章 · 获赞 769 · 访问量 34万+

猜你喜欢

转载自blog.csdn.net/qsbbl/article/details/97794878