RpcEndpointRef RPC通讯实体的引用,等同于ActorRef,在客户端被调用,用来向服务端请求,主要方法是ask和askWithRetry网络
[x] - 中止Dispatcher架构
class TransClientFactory { ConcurrentHashMap<SocketAddress, ClientPool> connectionPool; } class ClientPool { TransportClient[] clients; Object[] locks; }
TransportClientBootstrap 由TransportContext传入,启动加载(如 SAAL和加密认证之类的启动操做)框架
val msgDispatch = internalReceive(client, message) dispatcher.postMessage(msgDispatch, callback)
NettyStreamMessage: 提供文件服务能力socket
private val outboxes = new ConcurrentHashMap[RpcAddress, Outbox]() class Outbox { nettyEnv; //所在环境 address; //远端NettyRpcEnv地址 messages; //向外发送的消息列表 client; // TransportClient connectFuture; //链接任务的Future引用 stopped; //是否中止 draining; //Outbox正有线程处理消息 }
a) 若是是同一节点,直接使用Dispatcher的postLocalMessage和postOneWayMessage,直接将消息放入EndpointData的Inbox中;oop
b) 若是发送方在远处,将消息封装成OutboxMessage,放入远端RpcEndpoint对应的Outbox的messages列表中;post
与远端的TransportServer创建链接以后,经Netty管道,NettyRpcHandler处理,投递到远端的Dispatcher的EndpointData的Inbox中进行处理fetch
processFetchRequest 处理获取块请求 processRPCRequest 处理RPC请求 processStreamRequest 处理Stream请求 processOneWayMessage 处理无需回复的请求
RPC服务端实现加密
TransportServerspa