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