Nacos 客户端服务注册源码分析-篇二
Nacos 客户端服务注册源码分析-篇二
继续接上回,上回分析到 NacosNamingService 的整个注册的流程,其实是通过 NacosFactory.createNamingService 方法,反射获取 NacosNamingService 接口的实现类 NacosNamingService ,而 NacosNamingService 对象的构造方法中有一个初始化的 init 方法,该方法就初始化了客户端的代理委托。
NamingGrpcClientProxy中实现
public void registerInstance(String serviceName, String groupName, Instance instance) throws NacosException {NamingUtils.checkInstanceIsLegal(instance);clientProxy.registerService(serviceName, groupName, instance);
}
可以看到在 NacosNamingService 对象的 registerInstance 注册服务中调用了客户端代理 clientProxy 下的 registerService 注册服务方法,而该方法对应的接口 NamigClinetProxy 下的实现类有五个。
Nacos 基于gRPC进行服务的调用和结果的处理的所以,_registerService_指向的是实现类 NamingGrpcClientProxy
public void registerService(String serviceName, String groupName, Instance instance) throws NacosException {NAMING_LOGGER.info("[REGISTER-SERVICE] {} registering service {} with instance {}", namespaceId, serviceName,instance);redoService.cacheInstanceForRedo(serviceName, groupName, instance); //缓存数据doRegisterService(serviceName, groupName, instance); //基于 gRPC进行服务的调用}
/* Cache registered instance for redo. 缓存已注册的实例以进行重做。* * @param serviceName service name* @param groupName group name* @param instance registered instance*/
public void cacheInstanceForRedo(String serviceName, String groupName, Instance instance) {String key = NamingUtils.getGroupedName(serviceName, groupName);InstanceRedoData redoData = InstanceRedoData.build(serviceName, groupName, instance);synchronized (registeredInstances) {registeredInstances.put(key, redoData);}
}
/* Execute register operation. 执行寄存器操作。 @param serviceName name of service* @param groupName group of service* @param instance instance to register* @throws NacosException nacos exception*/
public void doRegisterService(String serviceName, String groupName, Instance instance) throws NacosException {InstanceRequest request = new InstanceRequest(namespaceId, serviceName, groupName,NamingRemoteConstants.REGISTER_INSTANCE, instance);requestToServer(request, Response.class);redoService.instanceRegistered(serviceName, groupName);