Nacos源码本地单机debug
1. 找到distribution项目的conf目录下nacos-mysql.sql脚本,初始化数据库
2. 找到console项目application.properties中的数据库配置(db.*),修改为本地数据库连接
3. 找到console项目Nacos.java,修改运行配置, VM 参数增加:-Dnacos.standalone=true,设置为单机模式
Run或Debug Nacos.java,地址为,就可以本地调试了。
Nacos文档,用户指南中有 OPEN -API指南,可以查询Nacos的REST API接口。
OPEN-API 实例注册流程:
nacos-naming项目
InstanceController.register( Request )
Instance Operator ClientImpl.registerInstance(namespaceId, serviceName, instance)
EphemeralClientOperationServiceImpl.registerInstance(service, instance, clientId)
AbstractClient.addServiceInstance(service, instancePublishInfo)
publishEvent(ClientEvent.ClientChangedEvent)
publishEvent(ClientOperationEvent.ClientRegisterServiceEvent)
publishEvent( meta dataEvent.InstanceMetadataEvent)
OPEN-API 实例列表流程:
nacos-naming项目
InstanceController.list(request)
InstanceOperatorClientImpl.listInstance(namespaceId, serviceName, subscriber, cluster , healthOnly)
ServiceStorage.getData(service)
ServiceStorage.serviceDataIndexes.get(service)
client 实例注册流程:
nacos-client项目
NacosNamingService.registerInstance(serviceName, ip, port, clusterName)
NamingG Rpc ClientProxy.registerService(serviceName, groupName, instance)
RpcClient.request(request, timeoutMills)
GrpcConnection.request(request, timeouts)
nacos-core项目
GrpcRequestAcceptor.request(grpcRequest, responseObserver)
RequestHandler.handleRequest(request, meta)
nacos-naming项目
InstanceRequestHandler.handle(request, meta)
以下流程与OPEN-API的实例注册流程相同
EphemeralClientOperationServiceImpl.registerInstance(service, instance, clientId)
AbstractClient.addServiceInstance(service, instancePublishInfo)
publishEvent(ClientEvent.ClientChangedEvent)
publishEvent(ClientOperationEvent.ClientRegisterServiceEvent) 将实例信息保存在map中
publishEvent(ServiceEvent.ServiceChangedEvent)
publishEvent(MetadataEvent.InstanceMetadataEvent)