我当时在学习的过程中搭建过demo,具体流程就是,我先定义了一个api接口模块,还定义一个服务提供者模块,然后服务提供方实现该接口,定义该方法具体的实现impl类,服务提供方启动时,将要暴露的服务和该服务具体的实现(及服务提供者)对应一起注册到注册中心中去,当时暴漏出来的服务是api接口服务,而具体的实现指向的是提供方自己编写的impl具体实现类,在zookeeper中此时api接口服务里面就有了一个具体的服务提供者。
会发现,这个提供者有相应的name名称和被分配的ip地址+端口。
消费者启动时,会订阅注册中心里面注册表中有关的服务信息,注册中心发送通知,将其所需服务的所有提供者信息缓存到消费者本地,消费者本来就定义了需要的服务接口,根据其服务提供者信息,会生成一个远程服务代理对象,这个代理对象的名称可以自定义,定义一个id,此时消费者就从容器中根据id获取到这个代理对象,用这个代理对象像调用本地方法似的实现远程通信了,其底层使用的是dubbo协议。
整个流程中,监控中心会监控整个过程。监控和通知是异步的,调用是同步的。