RPC流程图
2022-09-20 10:55:34 10 举报
RPC流程图
作者其他创作
大纲/内容
2、服务提供者 收集到所有的具体的服务实现之后,将其实例对象及服务的分组、版本等信息封装成RpcServiceConfig对象,RpcServiceConfig.builder() .group(rpcServerService.group()) .version(rpcServerService.version()) .service(rpcServiceImpl) .build();
1、服务端是用来提供功能的,所以作为服务的具体实现者,需要先实例化 RpcServiceImpl rpcServiceImpl = new RpcServiceImpl();
3、服务提供者 将所有的RpcServiceConfig对象注册到zk或者nacos上,同时,本地会保存一份所有具体服务实现的信息,将来被调用时,找到相应的实例对象,执行相应的方法。serviceProvider.publishService(rpcServiceConfig); this.addService(rpcServiceConfig); serviceRegistry.registerService(服务名,)
6、收集那些需要进行远程调用的接口,并将分组、版本信息一起封装成RpcServiceConfig对象
client端(netty版本)
server端(netty版本)
8、代理对象进行方法调用,实际上才会真正发生远程调用 rpcService.getNextLeapYear(2004)
5、初始化客户端的netty服务器,但此时并未真正启动,只有当某个代理对象发起远程调用时,才会开始对远程服务器发起连接。
9、代理对象进行方法调用后,进入到invoke代理逻辑
4、启动server端的netty服务器,监听相应端口。
10、回到服务端的逻辑服务端的netty服务器监听某个端口,等待调用者的请求或者心跳,当收到调用者信息的时候,信息会由与调用客户端相对于的channel进行处理,由RpcMessageDecoder进行解码,selector.select -> selectedkey -> channel ->channelPipeline -> channelHandler -rpcMessagsDecoder NettyRpcServerHandlerrpcMessagsDecoder将消息解码成 一个rpcMessage对象,该对象的data域具体描述代表该请求、或者响应的详细信息。是一个RpcRequest或者RPCResponse11、解析成rpcMessage对象在pipeline中向后传递,由NettyRpcServerHandler的channelRead方法来进行具体的业务响应。 如果是心跳相关的,有if逻辑进行处理,如果是真正的远程调用请求,那么需要使用第三步的服务提供者serviceProvider,其中保存了所提供的所有远程服务 通过反射,执行相应方法,获得结果后,再通过channel写回给客户端,这个写回不是立马执行的,因为nettty大部分读写操作都是异步的 写操作需要通过selector.select捕获写事件,再作为出站事件,经过pipeline处理后,才真正写回给服务端。
0 条评论
下一页