当前位置: 首页 > 网络应用技术

NACOS源代码系列 - 有关服务注册的事情

时间:2023-03-09 00:38:31 网络应用技术

  首先,在我们查看NACOS源代码之前,请考虑一下我们为什么阅读源代码?是要安装杯子吗?还是在女神面前展示她的代码技能?当然不是全部!

  这不是我们源代码的最终目的。作为技术人员,以上是所有云,这确实激发了我们增强我们的技术技能和整体状况。这是途径!让我们看一下八卦,让我们看一下源代码的好处

  NACOS核心功能点

  服务注册:NACOS客户端将通过发送REST请求来提供您自己的元数据,例如IP地址,端口和其他信息,将您自己的服务注册到NACOS服务器。双层 - 内存图。

  服务心跳:在服务注册后,NACOS客户端将保持正时心跳,以支持通知NACOS服务器的通知,这表明该服务始终可以防止被消除。

  服务健康检查:NACOS服务器将打开定时任务,以检查注册服务实例的健康状况。对于未收到客户心跳超过15s的情况,它将其健康属性设置为false(发现时将找不到客户服务。直接删除(排除的实例将恢复为发送心跳)

  服务发现:调用服务提供商的服务时,服务消费者(NACOS客户端)将将REST请求发送到NACOS服务器以获取上面注册的服务列表。该任务的最新注册表信息已更新为最新注册表的本地缓存信息

  服务同步:NACOS服务器群集将同步服务示例,以确保服务信息的一致性

  首先,我们需要下载NACOS的源代码,下载地址:https://github.com/alibaba/nacos

  放下源代码后,将其导入想法

  原始编译

  当我们成功导入它时,错误提示将出现,因为NACOS底层的数据通信将根据Protobuf序列化和降级。有必要将原始文件编译为相应的Java代码。

  最简单的安装所有Idues2021.2的内容已被捆绑并安装。

  您可以自动通过目标生成它们。

  NACOS缺乏ISTIO依赖问题解决问题

  我们只需要在文件根目录中执行以下命令:

  完成上述两个步骤之后,我们可以启动NACOS

  启动NACOS

  首先,我们找到了这个模块。这是我们的管理背景,并找到其开始课程。因为NACOS默认为群集启动,我们需要将其设置为单台计算机以启动

  设置命令:

  -dnacos.standalone = true -dnacos.home = e:est

  ACOS

  开始成功后,帐户密码:NACOS/NACOS

  在这一点上,我们的NACOS的源代码开始。

  让我们从客户服务的注册开始。我们首先可以认为,如果NACOS客户端要注册,哪些信息将传递给服务器?我们可以看到下面有一些信息

  以上是客户注册的测试类别,该类别模仿了NACOS的真实服务注册过程,包括Nacosserver连接,实例的创建,实例属性的分配和注册实例。因此,我们可以看到它包含两类信息:NACOS服务器连接信息和实例信息

  NACOS服务器连接信息:

  从上面,我们可以看到有关NACOS服务器的连接信息存储在属性中。

  示例信息:

  从上面的测试中,我们可以看到注册实例信息与实例一起携带,实例信息分为两个部分,一个是基本实例信息,另一个是元数据信息

  示例基本信息:

  元数据:

  元数据类型是哈希图。从当前的演示中,我们只能看到两个数据

  此外,我们还可以在类中查看一些默认信息。这些方法由GET方法提供

  您为什么这么说?从这些参数中,我们可以理解我们的服务之间的心跳差距是,超时时间以及传递了哪些参数和参数,以了解我们的实例是否健康。在同一时间,我们也可以看到一个更关键的核心类,这是真正创建实例的类 -

  Namingservice

  Namingservice是NACOS提供的统一接口。当我们单击检查它时,我们可以看到一些方法。这些方法为我们提供了不同的重负荷方法,以使用不同的方案。

  Namingservice的Instantia

  接下来,让我们看一下特定的实现

  心跳检测代码

  通过代理注册服务,我们了解代理接口由其完成。我们可以绘制初始结构方法。特定实例对象

  Namingclientproxydelegate在中国实施。它不是真正调用注册服务的代理实现类,并首先确定当前实例是否是为请求选择相应的客户端代理的瞬时对象。

  如果当前强度是瞬时对象,则使用请求的GRPC协议(NamingGrpClientProxy)请求,否则使用HTTP协议(naminghttpclientproxy),并且瞬时对象默认为。

  NamingGrpClientProxy中的实现

  一般关系图如下所示:

  我们真的很关心注册的核心。让我们看一下其继承关系

  在下图中,我们可以看到超级方法主要被调用,因此我们继续查看此类的构建方法:

  在弹簧容器的启动过程中,实现该接口以监视事件。通常,如果我们实现此类,将实现一种方法。当我们的项目启动时,将触发此方法

  从中我们可以在绑定中看到此方法

  方法调用方法注册服务

  方法,如下所示:

  如下:

  在中间,我们可以看到NACOS服务注册接口所需的完整参数

  在这里,我们会发现我们的请求实例接口的地址是。实际上

  以上是NACOS的客户注册过程。阅读源代码并不像我们想象的那么困难。如果您在文本中有任何问题或问题,请在下面留言。小型农民将尽快答复。让我们加油吧?