# 《高性能Polaris网关》通用过滤器-第13节:基于自定义SPI实现灰度过滤器

作者:冰河
星球:http://m6z.cn/6aeFbs (opens new window)
博客:https://binghe.gitcode.host (opens new window)
文章汇总:https://binghe.gitcode.host/md/all/all.html (opens new window)
源码获取地址:https://t.zsxq.com/0dhvFs5oR (opens new window)

沉淀,成长,突破,帮助他人,成就自我。

  • 本章难度:★★☆☆☆
  • 本节重点:基于自定义SPI实现灰度过滤器,从全局角度掌握高性能Polaris构建请求与响应信息的核心流程和代码设计。重点掌握整体调用链路的设计思路和设计方法,并能够将其灵活应用到自身实际项目中。

在高性能网关中,为了更好的扩展整体过滤器的功能,采用SPI的方式将过滤器动态加载的过滤器链中。并且已经适配自定义SPI进一步提升了可扩展性。接下来,就基于自定义SPI实现灰度过滤器。

# 一、前言

在之前的文章中,我们已经对网关的顶级核心过滤器接口进行了设计和实现,也进一步封装了请求和响应的模型,基本上完成了过滤器的整体代码框架,并对网关过滤器的两大顶级抽象类进行了设计和实现,也对网关通用过滤器链进行了设计和实现。随后,对网关过滤器通用工厂类进行了设计和实现。

为了进一步提升过滤器的扩展性,对过滤器进行优化,使其适配自定义SPI。并且已经基于自定义SPI实现了负载均衡过滤器、超时配置过滤器、HTTP过滤器、RPC过滤器、指标分析过滤器和Mock过滤器。接下来,就基于自定义SPI扩展实现灰度过滤器。

# 二、本节诉求

基于自定义SPI实现灰度过滤器,从全局角度掌握高性能Polaris构建请求与响应信息的核心流程和代码设计。重点掌握整体调用链路的设计思路和设计方法,并能够将其灵活应用到自身实际项目中。

# 三、核心类设计

本节,对基于自定义SPI扩展实现灰度过滤器的功能进行设计和封装实现,整体类图如图13-1所示。


可以看到,在类图上以自定义SPI扩展的灰度过滤器类就是GrayFilter。

注意:这里重点给大家展示基于自定义SPI实现GrayFilter过滤器类,其他代码的实现细节,例如自定义SPI的具体实现等,大家可以自行到本节对应的源码分支进行查看,这里不再赘述。

# 四、编码实现

本节,同样重点给大家展示基于自定义SPI实现的灰度过滤器类,其他代码的实现细节,例如自定义SPI的具体实现以及其他相关的实现类等,大家可以自行到本节对应的源码分支进行查看,这里不再赘述。

(1)实现GrayFilter类

GrayFilter类是网关的灰度过滤器类,当请求执行到灰度过滤器时,会获取请求头中key为gray的数据,如果值为true,会将网关上下文的gray字段设置为true,透传到下游过滤器。

源码详见:polaris-filter-route-gray工程下的io.binghe.polaris.filter.route.gray.GrayFilter。

# 查看完整文章

加入冰河技术 (opens new window)知识星球,解锁完整技术文章、小册、视频与完整代码