建网站和开发app哪个难,网站空间 哪个公司好,wordpress5文章外链,创意产品设计网文章目录 Nacos自动注册原理实现服务注册更新并如何保存到注册表 Nacos自动注册原理实现
完整流程 我们知道SpringBoot提供了挂载点的方式来帮助我们的类完成自动注入。 Nacos再META-INF的spring.factories这个文件中添加了自己需要自动注入的Bean对象。 叫做NacosServiceRegi… 文章目录 Nacos自动注册原理实现服务注册更新并如何保存到注册表 Nacos自动注册原理实现
完整流程 我们知道SpringBoot提供了挂载点的方式来帮助我们的类完成自动注入。 Nacos再META-INF的spring.factories这个文件中添加了自己需要自动注入的Bean对象。 叫做NacosServiceRegistry这个类实现了SpringCloud提供的register方法来帮助我们向注册中心注册实例。 因此后面的操作流程就变为了如何让服务启动的时候就能自动的调用这个register方法。 Nacos的方法是依靠Spring的容器创建发生的事件来做到的。 我们知道创建IOC容器的时候会调用refresh方法来注册监听器发布事件。 而Nacos的自动注册类就实现了ApplicationListener方法并且它监听的就是ServletWeb的初始化事件。 那么只要在容器完成初始化之后就会完成将当前服务注册到注册中心这一过程。
服务注册更新并如何保存到注册表
完整流程 我们知道Nacos有三个隔离环境的东西namespacegroupservice。 其中service就是具体的服务而这些服务支持以集群的方式部署所以service中包含了cluster这个结构。 从上面的分析我们也知道Nacos的注册表信息应该是一个类似于三层Map的一个结构。 也就是namespace里面对应多个group每个group可以有多个的serviceservice中可以有集群cluster而这些cluster集群中的一个又一个的就是我们的instance实例也就是我们启动的一个又一个的微服务。 所以当我们注册一个服务的时候我们需要先获取到Service知道它是那个服务然后将当前实例放入到这个服务对应的集合中去。 此时我们就可以使用上面的服务的namespacegroup的方式来定位到这个service。 定位到service之后如果service还没创建就创建Nacos为了保证并发安全甚至使用了双检索的方式来创建service然后创建完毕service之后就可以将服务放入结构为服务名称服务实例。 而此时这将会创建一个定时任务这个定时任务将会获取到当前service中的所有实例并且判断15s内是否发送回了心跳如果没有的话会将实例的healthy状态设定为false而如果超过30s那么当前实例将会被剔除。 到此时service就已经创建好了我们现在要做的就是吧当前的新实例添加进去。 Nacos的方式为全量添加也就是先获取之前已经存在的然后再补上当前的。 这里用到一个CopyOnWrite的方式来保证并发安全。 之后的流程就是判断当前实例是临时还是持久实例然后放入到临时或者持久实例对应的set集合中去。 这里分为Distro和Raft两种协议Distro使用的是异步的方式来更新数据并且会发布一个事件来让集群中的其他节点知道数据更新了。