RPC服務治理框架實戰(一) - 手寫RPC

0 相關源碼

1 從使用者考慮

用,戶使用RPC框架開發過程時須要作什麼?git

  • 定義過程接口
  • 服務端實現過程
  • 客戶端使用生成的stub代理對象

2 設計客戶端

客戶端生成過程接口的代理對象設計客戶端代理工廠,用JDK動態代理便可生成接口的代理對象。github

思考

一、在ClientStubInvocationHandler中 需完成哪些事情?網絡

二、將請求的內容編組爲消息這件事由誰來作?多線程

三、消息協議是固定不變的嗎?它與什麼有關?看框架對協議的支持廣度,若是支持多種協議,就是會靈活變化的,它與具體的服務相關,A服務提供者可能選用的是協議1,B服務提供者可能選用協議2。框架

四、某服務是用的什麼消息協議這個信息從哪來?從獲取的服務信息中來,所以須要一個服務信息發現者。線程

把發現者設計出來, 要求:可靈活支持多種發現機制設計

五、咱們想要作到能夠支持多種協議,咱們的類該如何設計?面向接口、策略模式、組合3d

  • 問題:
    ➢ marshalling和unmarshalling方法該定義怎樣的參數與返回值?
    ➢ 編組、解組的操做對象是請求、響應,請求、響應的內容是不一樣的。編組、解組兩個方法是否知足?

設計客戶端協議層

  1. 定義框架標準的請求, 響應類

  1. 將協議層擴展爲四個
    消息協議獨立爲一層(客戶端、服務端均須要)

網絡層發送請求,得到響應
要發起網絡請求,則須知道服務地址代理

  • 客戶端完整類圖

    實現客戶端
    按照類圖設計,填碼!
    看ClientStubProxyFactory核心類的代碼示例!

在實現過程當中,協議層涉及一個重要概念code

  • 參數序列化、反序列

3 設計服務端

3.1 RPCServer

客戶端請求過來了,服務端首先須要經過RPCServer接收請求。

  • RPCServer

3.2 思考

RPCServer接收到客戶端請求後,還須要作哪些工做?

網絡層在RPCServer中提供多線程來處理請求,消息協議層複用客戶端設計的。(設計一個請求處理類,來完成網絡層以上的事情。)

3.3 RequestHandler

RPCServer接收到請求後,將請求交給RequestHandler來處理RequestHandler調用協議層來解組請求消息爲Request對象,而後調用過程!

人性的拷問

➢ RequestHandler如何獲得過程對象?➢ Request中有什麼?➢ 服務名、方法名、參數類型、參數值➢ 是否須要一個過程註冊模塊?

看看以後的設計

過程註冊模塊:讓用戶將他們的過程註冊到RPC框架➢ 過程暴露模塊:想對外發布(暴露)服務註冊、暴露能夠由同一個類實現

  1. RPCServer 中實現網絡層: Netty, 使用RequestHandler
  2. ServiceRegister 模塊實現服務註冊、發佈。
  3. RequestHandler 中實現消息協議處理、過程調用

代碼實現

  • 首先,用戶須要設置你的端口和協議哦

歡迎關注全是乾貨的技術公衆號:JavaEdge

相關文章
相關標籤/搜索