以下内容基于Nacos 2.1.0-SNAPSHOT

1. 服务实例注册示例

当nacos服务已经启动后,可以使用以下示例代码向nacos注册服务实例

@Test
public void testRegisterInstance() throw Exception {
    // nacos地址,用户和密码
    Properties properties = new Properties();
    properties.put(PropertyKeyConst.SERVER_ADDR, "127.0.0.1:8848");
    properties.put(PropertyKeyConst.USERNAME, "nacos");
    properties.put(PropertyKeyConst.PASSWORD, "nacos");
   
    // 构建服务实例
    Instance instance = new Instance();
    instance.setIp("1.1.1.1");
    instance.setPort(800);
    instance.setWeight(2);
    Map<String, String> map = new HashMap<>();
    map.put("netType", "external");
    map.put("version", "2.0");
    instance.setMetadata(map);
    
    // 创建NamingService
    NamingService namingService = NacosFactory.createNamingService(properties);
    // 通过NamingService注册服务实例,并指定服务名为 nacos.test.1
    namingService.registerInstance("nacos.test.1", instance);
}

2. 客户端执行流程

1. 相关的接口和类

  • NamingService定义了与服务实例相关的方法,我们可以通过NamingService完成服务实例的注册、注销、获取,目前只有一个实现类NacosNamingService。在NacosNamingService中持有一个NamingClientProxy的属性,并由NamingClientProxy来完成服务实例相关的操作。

  • NamingClientProxy封装了nacos客户端与服务端的交互细节。主要有两个实现类:

    • NamingHttpClientProxy采用gRpc协议与服务端进行交互

    • NamingGrpcClientProxy采用Http协议与服务端进行交互

    当需要服务实例Instance的属性ephemeral为true时,将使用NamingHttpClientProxy与服务端进行交互。

  • RpcClient抽象远程客户端,用以连接服务器,发起请求,接受响应。

2. 时序图

 

3. 服务端执行流程

1. 相关接口和类

  • GrpcRequestAcceptor类用于统一接受grpc请求,在request方法中,根据请求元数据中的type属性来判断由哪个RequestHandler来处理

  • RequestHandler抽象类用于Nacos请求处理,其中子类InstanceRequestHandler用于处理服务实例注册和注销请求

  • ClientOperationService接口提供客户端操作(实例注册,实例注销,订阅服务,取消订阅),有以下两个实现类:

    • PersistentClientOperationServiceImpl:对持久的客户端和服务提供操作

    • EphemeralClientOperationServiceImpl:对临时的客户端和服务提供操作

    在构建Instance时,可以通过ephemeral属性来指定为持久实例,还是临时实例,ephemeral默认为true

  • ClientManager用于管理Nacos naming Client

  • NotityCenter统一事件通知中心

2. 时序图

 

4. 待解惑

  1. gRpc协议是什么?

  2. 服务注册请求数据结构长什么样?

  3. 服务注册成功后,存储在哪里?

  4. 发布ClientOperationEvent.ClientRegisterServiceEvent事件和MetadataEvent.InstanceMetadataEvent事件的目的是什么


版权声明:本文为lijiekobe89原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/lijiekobe89/article/details/119914864