# 《高性能Polaris网关》热插拔插件-第01节:网关热插拔插件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网关热插拔插件的设计与实现。重点掌握整体调用链路的设计思路和设计方法,并能够将其灵活应用到自身实际项目中。

插件作为网关的重要组成部分,主要承担网关的细节任务执行,例如,网关的协议转化等。理论上可以在网关的任何地方执行插件的任务,高性能Polaris网关在插件的设计上,本身也是实现了插件的热插拔特性,也就是说,高性能Polaris网关的插件支持随时开启和关闭,随时上线和下线。

# 一、背景

截止到目前,我们已经完成了网关最基础和最核心的功能,也对通过网关访问后端服务进行了实现。在注册中心篇章,已经对注册中心的通用SPI接口进行了设计与定义,也基于SPI扩展实现了Nacos注册中心和Zookeeper注册中心,同时,也给小伙伴们留了基于SPI扩展实现Etcd注册中心和Consul注册中心的作业。设计并实现完各种注册中心后,也对网关的启动容器整合注册中心实现服务注册与发现进行了设计和实现。

在负载均衡篇章,已经完成了负载均衡通用SPI接口与顶级抽象类的设计与实现,并基于自定义SPI扩展实现了随机算法负载均衡策略、加权随机算法负载均衡策略、轮询负载均衡策略、加权轮询负载均衡策略、哈希负载均衡策略、加权哈希负载均衡策略、源IP地址哈希负载均衡策略、源IP地址加权哈希负载均衡策略、一致性哈希负载均衡策略。

在增强型负载均衡篇章,完成了增强型加权随机负载均衡策略、增强型加权轮询算法负载均衡策略、增强型加哈希询算法负载均衡策略、增强型加源IP算法负载均衡策略和增强型一致性哈希询算法负载均衡策略。

在实战负载均衡篇章,已经实现了通过SPI加载各种负载均衡策略访问后端服务。

接下来,开启一个新的篇章,那就是配置中心篇章。在配置中心篇章,会通过SPI的方式对接多种配置中心。目前,在配置中心篇章,已经对配置中心的通用SPI接口和通用监听器进行了设计和定义,基于SPI扩展实现了Nacos配置中心、Zookeeper配置中心、Etcd配置中心和Consul配置中心。同时,实现了网关启动容器整合配置中心实现服务配置。

完成这些设计和实现后,还有一个重点的功能就是网关的插件设计,在预想的网关插件中,可以执行协议转化等细节任务,插件也可以在网关的任何逻辑中执行。并且高性能Polaris网关在插件的设计上,本身也是实现了插件的热插拔特性,也就是说,高性能Polaris网关的插件支持随时开启和关闭,随时上线和下线。接下来,就对网关热插拔插件SPI接口与核心工厂类进行设计与实现

# 二、本节重点

对网关热插拔插件SPI接口与核心工厂类进行设计与实现,深入理解高性能Polaris网关热插拔插件的设计与实现。重点掌握整体调用链路的设计思路和设计方法,并能够将其灵活应用到自身实际项目中。

# 三、核心类设计

网关热插拔插件SPI接口与核心工厂类的类图如图1-1所示。


可以看到,在实现网关热插拔插件SPI接口与核心工厂类时,主要定义了Plugin接口,在Plugin接口中,定义了checkPlugin()方法、init()方法、destroy()方法和getPlugin()方法。并且MultiplePlugin类会实现Plugin接口,并实现Plugin中定义的方法。MultiplePlugin类中会管理多个通过SPI扩展实现Plugin接口的类。最后,实现了PluginFactory类,PluginFactory类会依赖Plugin接口和MultiplePlugin类,对外提供获取MultiplePlugin对象的方法。

注意:本节只给大家展示实现网关热插拔插件的核心逻辑,其他代码的实现细节,大家可以自行到本节对应的源码分支进行查看,这里不再赘述。

# 四、编码实现

本节,就对网关热插拔插件SPI接口与核心工厂类进行编码实现,其他代码的实现细节,大家可以自行到本节对应的源码分支进行查看,这里不再赘述。

(1)实现Plugin接口

Plugin接口是实现网关热插拔插件的核心SPI接口。

源码详见:polaris-plugins-api工程下的io.binghe.polaris.plugins.api.Plugin。

# 查看完整文章

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