Nacos架构
- Provider APP:服务提供者
- Consumer APP:服务消费者
- Name Server:通过VIP(Virtual IP)或DNS的方式实现Nacos高可用集群的服务路由
- Nacos Server:Nacos服务提供者,里面包含的Open API是功能访问入口,Conig Service、Naming Service 是Nacos提供的配置服务、命名服务模块。Consitency Protocol是一致性协议,用来实现Nacos集群节点的数据同步,这里使用的是Raft算法(Etcd、Redis哨兵选举)
- Nacos Console:控制台
注册中心的原理
- 服务实例在启动时注册到服务注册表,并在关闭时注销
- 服务消费者查询服务注册表,获得可用实例
- 服务注册中心需要调用服务实例的健康检查API来验证它是否能够处理请求
SpringCloud完成注册的时机
在Spring-Cloud-Common包中有一个类org.springframework.cloud. client.serviceregistry .ServiceRegistry ,它是Spring Cloud提供的服务注册的标准。集成到Spring Cloud中实现服务注册的组件,都会实现该接口。
该接口有一个实现类是NacoServiceRegistry。
SpringCloud集成Nacos的实现过程:
在spring-clou-commons
包的META-INF/spring.factories
中包含自动装配的配置信息如下:
其中AutoServiceRegistrationAutoConfiguration
就是服务注册相关的配置类:
在AutoServiceRegistrationAutoConfiguration
配置类中,可以看到注入了一个AutoServiceRegistration
实例,该类的关系图如下所示。
可以看出, AbstractAutoServiceRegistration
抽象类实现了该接口,并且最重要的是NacosAutoServiceRegistration
继承了AbstractAutoServiceRegistration
。
看到EventListener我们就应该知道,Nacos是通过Spring的事件机制继承到SpringCloud中去的。
AbstractAutoServiceRegistration
实现了onApplicationEvent抽象方法,并且监听WebServerInitializedEvent
事件(当Webserver初始化完成之后) , 调用this.bind ( event )
方法。
最终会调用NacosServiceREgistry.register()
方法进行服务注册。