# 《高性能Polaris网关》注册中心-第05节:基于自定义SPI扩展实现Consul注册中心(作业篇)
作者:冰河
星球: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扩展实现Consul注册中心,代码框架已搭建好,小伙伴们只需实现核心逻辑即可,深入理解高性能Polaris网关注册中心的设计与实现。重点掌握整体调用链路的设计思路和设计方法,并能够将其灵活应用到自身实际项目中。
截止到目前,我们已经完成了网关最基础和最核心的功能,也对通过网关访问后端服务进行了实现。如何让网关自动发现后端服务呢?这就需要网关实现一套通用的服务注册与发现逻辑。在注册中心篇章,已经对注册中心的通用SPI接口进行了设计与定义,也基于SPI扩展实现了Nacos注册中心和Zookeeper注册中心,同时,给小伙伴们留了基于SPI扩展实现Etcd注册中心的作业。接下来,再给小伙伴们留个作业:基于SPI扩展实现Consul注册中心。
# 一、背景
截止到目前,我们已经实现了网关的最基础与最核心的功能,主要包括:需求设计、总体架构设计、环境搭建、通用模型设计与实现、基于自定义SPI设计与实现通用过滤器、高性能BatchEvent模式与MPMC模式缓冲队列通用处理器的设计与实现、HTTP核心处理器的设计与实现和网关核心启动容器的设计与实现。
为了能够让网关自动发现后端服务,我们已经对注册中心的通用SPI接口进行了设计与定义,也基于SPI扩展实现了Nacos注册中心和Zookeeper注册中心,同时,给小伙伴们留了基于SPI扩展实现Etcd注册中心的作业。接下来,再给小伙伴们留个作业:基于SPI扩展实现Consul注册中心。
# 二、本节重点
给小伙伴们留的作业:基于自定义SPI扩展实现Consul注册中心,代码框架已搭建好,小伙伴们只需实现核心逻辑即可,深入理解高性能Polaris网关注册中心的设计与实现。重点掌握整体调用链路的设计思路和设计方法,并能够将其灵活应用到自身实际项目中。
# 三、核心类设计
基于自定义SPI扩展实现Consul注册中心的类图如图5-1所示。

可以看到,在高性能Polaris网关中,ConsulRegistryService类是基于自定义SPI扩展实现Consul注册中心的核心实现类,ConsulRegistryService类会实现RegistryService接口,并实现RegistryService接口中定义的方法。同时,在ConsulRegistryService类中会通过监听器监听服务发现拉取到的服务定义信息和服务实例列表,将其放入对应的缓存。
注意:基于自定义SPI扩展实现Consul注册中心是给小伙伴们留的作业,本节的源码分支搭建了基于自定义SPI扩展实现Consul注册中心的核心代码框架,大家可以基于这个代码框架实现基于Consul注册中心的服务注册、服务反注册和服务发现等逻辑。
# 四、编码实现
本节,就对网关基于自定义SPI扩展实现Consul注册中心的核心代码框架进行编码实现,小伙伴们可基于代码框架实现Consul注册中心
(1)实现ConsulRegistryService类
ConsulRegistryService类是基于自定义SPI扩展实现Consul注册中心的核心实现类,ConsulRegistryService类会实现RegistryService接口,并实现RegistryService接口中定义的方法。
源码详见:polaris-register-consul工程下的io.binghe.polaris.register.consul.ConsulRegistryService。
# 查看完整文章
加入冰河技术 (opens new window)知识星球,解锁完整技术文章、小册、视频与完整代码