Nacos分Client和Service
Client:
核心类NacosServiceRegister启动心跳检测任务5秒、封装相关信息通过Http调用Service接口完成实例注册,客户端分析入口:https://mp.csdn.net/mp_blog/creation/editor/122210701
Service:
注册服务:/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8080
先总结整体逻辑,在InstanceController#register接口提供了注册实例方法
1.根据参数创建Service实例,并把该实例放到缓存中ServiceMap
2.调用该服务Service.init()方法,添加定时任务对客户端对心跳检测
3.添加该服务Service到监听列表中,动态监听来自客户端的数据变化
4.添加该服务的IP到实例缓存中,addInstance
1.注册服务入口
/**
* Register new instance.
*
* @param request http request
* * @return 'ok' if success
* @throws Exception any error during register
*/
@CanDistro
@PostMapping
@Secured(parser = NamingResourceParser.class, action = ActionTypes.WRITE)
public String register(HttpServletRequest request) throws Exception {
..................................
// 这里调用InstanceOperatorServiceImpl
getInstanceOperator().registerInstance(namespaceId, serviceName, instance);
return "ok";
}
2.入口方法 com.alibaba.nacos.naming.core.ServiceManager#registerInstance
/**
* Register an instance to a service in AP mode.
*
* <p>This method creates service or cluster silently if they don't exist.
*
* @param namespaceId id of namespace
* @param serviceName service name
* @param instance instance to register
* @throws Exception any error occurred in the process
*/
public void registerInstance(String namespaceId, String serviceName, Instance instance) throws NacosException {
// 创建一个服务Service,同时完成主要逻辑
// 按照nameSpaceId 和serviceName来完成第一次且只有一次的创建
createEmptyService(namespaceId, serviceName, instance.isEphem