消费者的调用过程:
首先,调用过程也是从一个Proxy开始的,Proxy持有了一个Invoker对象。然后触发invoke调用。在invoke调用过程中,需要使用cluster,Cluster负责容错,如调用失败的重试,Cluster在调用之前会通过Directory获取所有可以调用的远程服务invoker列表(一个接口可能有多个节点提供服务)。由于可以调用的远程服务很多,此时如果用户配置了路由规则,那么还会根据路由规则将Invoker列表过滤一遍。
再通过LoadBalance方法做负载均衡,最终选出一个可以调用的Invoker。这个Invoker在调用之前又会经过一个过滤器链,这个过滤器链通常是处理上下文,限流,计数等。
接着,会使用Client做数据传输,如我们常见的Netty Client等。对数据包进行序列化,然后传输到服务提供者。服务提供者收到数据包,再对完整的数据报文做反序列化的处理
最后,request请求会被分配到线程池中进行处理,Server处理这些Request,根据请求查找对应的Exporter,再经过一个服务提供者的过滤器链我们最终就得到了一个具体接口的真实实现并调用。
生产者的调用过程:
首先,生产者启动,初始化服务实例,通过Proxy组件调用具体协议,把服务端需要暴露的接口封装成Invoker,然后转换成Exporter,这个时候框架会打开服务端口等并记录服务实例到内存中,最后通过Registry把服务元数据注册到注册中心。这就是服务端整个接口暴露的过程