Nacos服务注册简要流程

以下内容基于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事件的目的是什么

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值