自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 12. Nacos客户端-监听远程配置

可能有小伙伴没了解过长轮询,可以理解为:客户端发一个长轮询请求给服务端,并指定超时时间,服务端可以选择立马返回结果,也可以不立马返回,只要在超时时间范围内返回即可,上面方法中也是这样的逻辑,如果本地配置和传过来的客户端配置信息不一致,立马返回结果,否则通过ClientLongPolling线程异步处理,只要超时时间范围内,本地配置发生改变就返回结果。当配置中心的配置发生变更,nacos客户端可以做到动态感知,并更新到本地,怎么实现的,本章和大家一起来探讨一番 ~~

2023-12-03 15:54:08 1090

原创 11. Nacos客户端-启动获取远程配置

配置文件,后面加载的会覆盖前面加载的配置,即优先级更高,这里我们就看。中 属性注入会拿到 Spring 容器所有。文件加载到 Spring容器 生成bean。获取结果后经过一层层返回,处理,最终回到。,该类通过读取配置中心依赖包中的。而 Nacos配置中心提供了。类型的 bean,设置到。接口,因此会调用它的。综上所述,最终会调用。的 locate 方法。如何获取远程配置,在。而现在容器中会有一个。

2023-12-03 15:52:39 570

原创 10. Nacos服务端-集群同步状态

要互相同步状态,以便及时感知集群中的节点状态情况,前面几章中很多地方有。的初始化方法中,有两个线程会执行,分别是。的判断,就需要用到节点的数量。搭建集群时,集群中的每个。再看看调用的这个接口,在。

2023-12-03 15:12:15 476

原创 09. Nacos服务端-定时发送实例状态至其他server

可以发现这个机制是挂羊头卖狗肉,还是让其他 server 来自己server 这边查询service一个个实例的状态,然后更新到其他server。本功能笔者觉得没有什么必要,因为前面三篇文章已经有很多 server 之间同步数据的方式了,但是既然有这个机制,可能是某些特殊情况,笔者没有考虑到吧。队列中,看到这里可能有读者立马想到 “肯定有一个线程会异步处理这个队列”线程类,就是从队列中poll元素,处理其他。的这个接口做了什么处理。

2023-12-03 15:06:43 462

原创 08. Nacos服务端-定时发送校验数据至其他server

方法,传入一个空的List,updateIps方法我们之前看过,最终会将本地注册表中的临时实例集合 和 持久实例集合覆盖掉,不就是删除吗!不为空,发送HTTP请求 至 远程发送数据的server 查询这些key对应的服务实例数据,更新到本地。该方法我们之前在《Nacos服务端-启动拉取其他server的服务列表》已经看过,就是先存缓存,再调用。上一篇文章讲到到 Server 在启动时会主动拉取其他Server的服务列表,其中的入口在。这个接口比较简单就是返回缓存中这些key的值,非常简单就不看了…

2023-12-03 15:02:59 427

原创 07. Nacos服务端-启动拉取其他server的服务列表

引言:上一篇文章讲到,当 Nacos-server 集群中的某一个 server 节点收到注册实例、删除实例请求时,都会将实例数据同步到其他 server 节点,并且同步失败还会进行重试操作,一定程度上保证了server集群的数据一致性,但是当某一个server节点是新加入集群的,或者它之前宕机了,需要重新启动,那它本地就没有任何实例数据,不可能等其他server有实例新增或删除时再同步过来,那样太过于被动,于是有这样一个机制,当。如果是 Springboot 项目,可以实现。的构造方法中,执行了该操作。

2023-12-03 14:56:00 704

原创 06. Nacos服务端-同步服务实例

喜闻乐见的是,果然为了提升性能,采用了异步处理方式,将任务添加到一个 tasks中,后续再处理,但是大家可能这时候会疑惑,我怎么知道在哪里会处理?告诉大家一个经验,一般来说这种异步处理逻辑,在哪个类里面添加的任务,该类中。上面方法的逻辑就是取出所有的任务key 进行遍历,然后获取 NacosTaskProcessor,调用。进行处理,如果处理失败或者发生异常,就将任务重新添加到Tasks,这里的关键逻辑肯定是。上面方法就是调用 task.run(),而 task 就是前面将任务进行转换过后的。

2023-12-03 14:48:38 409

原创 05. Nacos服务端-实例变更推送至客户端

hostReactor.processServiceJson 处理结果数据,之前在客户端拉取服务列表中看过,可以自行查看《02. Nacos客户端-服务发现原理》ClientBeatCheckTask 类的 run 方法(怎么进到这个方法请参考《4. Nacos服务端-注册实例、心跳健康检测》)Service类的 updateIPs 方法(怎么进到这个方法请参考《4. Nacos服务端-注册实例、心跳健康检测》)客户端 PushReceiver 是一个线程类。

2023-12-03 14:34:06 623

原创 04. Nacos服务端-注册实例、心跳健康检测

至此服务注册流程完成,最值得借鉴的就是它的异步处理思想,先将数据写入缓存、放到队列,开发人员可能担心后续逻辑比较多,比较耗时,因此用一个Notifier线程进行异步处理。继续看 addInstance 方法,这里面比较关键的逻辑在 addIpAddress方法 和 consistencyService.put方法,我们一个个来看。其中 createEmptyService 方法的逻辑也比较重要,它主要是创建一个空的service,如果某服务没有实例注册过,就会创建一个空的service。

2023-12-03 14:18:01 396

原创 03. Nacos客户端-心跳续约

服务端收到心跳预约请求,就是各种判断,然后将最后一次心跳时间设置为当前时间,如果非健康状态,则改为健康。可以发现Nacos 在很多地方用到了异步处理的方式,这种思想值得借鉴。

2023-12-03 14:08:19 376

原创 02. Nacos客户端-服务发现原理

2、判断是否有新增实例、修改实例、删除实例,如果有就发布实例变更事件(该事件会触发 InstancesChangeNotifier 的 onEvent 方法,然后再将事件,转为NamingEvent事件,最终调用到 NacosWatch类 start 方法里的 EventListener 监听器的onEvent方法,判断如果本实例的Meta信息和server端的不一样,更新本地的meta信息)3、如果有修改实例,更新本地的心跳信息(本地会定时发送心跳请求给nacos-server)接口,获取一次服务列表。

2023-12-03 13:06:46 389

原创 01. Nacos客户端-自动注册原理

后面就是构建请求参数、请求头等内容,不过多赘述,最终调用nacos-server的 /v1/ns/instance。从它的类继承关系图,可以看出它是一个 ApplicationListener,即监听器。它监听的事件类型为:WebServerInitializedEvent。经过一系列调用,最终调用到。

2023-12-03 13:00:29 414 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除