相關源碼
1 從使用者考慮
用,戶使用RPC架構開發過程時需要做什麼?
- 定義過程接口
RPC服務治理架構實戰(一) - 手寫RPC0 相關源碼 1 從使用者考慮2 設計用戶端3 設計服務端 - 服務端實作過程
- 用戶端使用生成的stub代理對象
RPC服務治理架構實戰(一) - 手寫RPC0 相關源碼 1 從使用者考慮2 設計用戶端3 設計服務端
2 設計用戶端
用戶端生成過程接口的代理對象
設計用戶端代理工廠,用JDK動态代理即可生成接口的代理對象。
思考
1、在ClientStubInvocationHandler中 需完成哪些事情?
2、将請求的内容編組為消息這件事由誰來做?
3、消息協定是固定不變的嗎?它與什麼有關?
看架構對協定的支援廣度,如果支援多種協定,就是會靈活變化的,它與具體的服務相關,
A服務提供者可能選用的是協定1,B服務提供者可能選用協定2。
4、某服務是用的什麼消息協定這個資訊從哪來?
從擷取的服務資訊中來,是以需要一個服務資訊發現者。
把發現者設計出來, 要求:可靈活支援多種發現機制
5、我們想要做到可以支援多種協定,我們的類該如何設計?
面向接口、政策模式、組合
-
問題:
marshalling和unmarshalling方法該定義怎樣的參數與傳回值?
編組、解組的操作對象是請求、響應,請求、響應的内容是不同的。編組、解組兩個方法是否滿足?
設計用戶端協定層
- 定義架構标準的請求, 響應類
- 将協定層擴充為四個 消息協定獨立為一層(用戶端、服務端均需要)
RPC服務治理架構實戰(一) - 手寫RPC0 相關源碼 1 從使用者考慮2 設計用戶端3 設計服務端
網絡層
發送請求,獲得響應
要發起網絡請求,則須知道服務位址
- 用戶端完整類圖
RPC服務治理架構實戰(一) - 手寫RPC0 相關源碼 1 從使用者考慮2 設計用戶端3 設計服務端
實作用戶端
按照類圖設計,填碼!
看ClientStubProxyFactory核心類的代碼示例!
在實作過程中,協定層涉及一個重要概念
- 參數序列化、反序列
3 設計服務端
3.1 RPCServer
用戶端請求過來了,服務端首先需要通過RPCServer接收請求。
- RPCServer
RPC服務治理架構實戰(一) - 手寫RPC0 相關源碼 1 從使用者考慮2 設計用戶端3 設計服務端
3.2 思考
RPCServer接收到用戶端請求後,還需要做哪些工作?
網絡層在RPCServer中提供多線程來處理請求,消息協定層複用用戶端設計的。
(設計一個
請求處理類
,來完成網絡層以上的事情。)
3.3 RequestHandler
RPCServer接收到請求後,将請求交給RequestHandler來處理
RequestHandler調用協定層來解組請求消息為Request對象,然後調用過程!
人性的拷問
RequestHandler如何得到過程對象?
Request中有什麼?
服務名、方法名、參數類型、參數值
是否需要一個過程注冊子產品?
看看之後的設計
過程注冊子產品
:讓使用者将他們的過程注冊到RPC架構
過程暴露子產品
:想對外釋出(暴露)服務注冊、暴露可以由同一個類實作
- RPCServer 中實作網絡層: Netty, 使用RequestHandler
- ServiceRegister 子產品實作服務注冊、釋出。
- RequestHandler 中實作消息協定處理、過程調用
代碼實作
- 首先,使用者需要設定你的端口和協定哦
RPC服務治理架構實戰(一) - 手寫RPC0 相關源碼 1 從使用者考慮2 設計用戶端3 設計服務端