
本課程你將學到:
如何從零設計並實現一個輕量級 RPC 框架,掌握網路通訊全流程
使用 Netty 實現非同步、高效能的客戶端與服務端通訊模型
自訂 RPC 協議、序列化機制、請求/回應模型,提升可擴展性與穩定性
利用 Java 動態代理與反射機制,實現服務呼叫透明化
實現服務註冊中心、負載平衡、逾時控制、重試與容錯機制
逐行解析 Spring Boot 啟動流程中的關鍵原理,並與本課程 RPC 框架設計進行對比與借鑑
參考主流開源框架(如 Spring、MyBatis 等)原代碼設計思路,理解優秀框架如何分層與解耦
融入大量設計模式實戰講解:工廠模式、代理模式、模板方法、單例模式等在框架中的實際應用
學習如何進行系統分層、職責劃分、項目代碼解耦等微服務架構設計核心思想
最終產出一個可運行、可擴展、可講解的自訂 RPC 框架,可用於作品集、履歷展示或技術布道
每一行核心程式碼皆手把手教學,源代碼級深度講解,真正幫助你從「會用」邁向「能造」
RPC(Remote Procedure Call,遠端程序呼叫)是一種通訊機制,允許你像呼叫本地方法一樣去呼叫另一台遠端伺服器上的方法。呼叫方無需了解底層的通訊細節,RPC 框架會幫你「封裝呼叫、發送請求、解析結果」。
市面上常见的RPC框架.
图解本课程设计的RPG框架工作流程。
在 Netty 中,Inbound Handler(入站處理器)和 Outbound Handler(出站處理器)是處理網路事件的兩類核心元件,它們在 Netty 的 ChannelPipeline 中扮演不同的角色。
Maven项目,本框架圍繞Springboot進行開發。
服務中心即註冊中心,所有客戶端啟動時會自動連接至註冊中心。
註冊中心維護所有客戶端的資訊。
註冊中心的底層實現原理是基於 Netty 的 ServerBootstrap。
客戶端即服務提供方,任何客戶端都能發起遠端呼叫請求(RPC - Remote Procedure Call)。
客戶端的底層實現原理是基於 Netty 的 Bootstrap。
客戶端之間的溝通需要傳輸媒介:消息對象(MessagePayload)
消息對象載體包含:RpcRequest、RpcResponse 對象。
設計模式:Builder Pattern構建調用鏈快速構建MessagePayload對象。
消息對象的序列化(Serialize)及反序列化(Deserialize)
編寫特殊轉換器處理枚舉字段。
消息出站时编码,自定义编码协议。
第1个字节为消息种类,接下来4个字节表示一个int,存放消息长度。
消息入站时需要解碼:配合自定義協議完成解碼。
深入講解内存緩衝區ByteBuf,對比JDK原生ByteBuffer。
内存池化概念,堆内外緩衝區。
核心入站處理器 Part 1:當消息到達服務中心后的處理邏輯。
核心入站處理器 Part 2:當消息到達服務中心后的處理邏輯。
將暴露出去的RPC方法通過自定義注解(MarkAsRpc)標注出來。
利用高級接口SmartInitializingSingleton特性,完成被標注的Rpc方法掃描出來,並用Map進行維護。
RPC方法元數據保存在自定義RpcMethodDescriptor中。
圖文流程化講解Rpc服務發現原理及機制。
1. 創建RPC公共接口包,并被所有RPC服務依賴。
2. 創建自定義注解EnableDingdingRpcClient。
3. 在注解上通過Import導入核心啓動類(RpcClientRegistrar)手動構建BeanDefinition並添加進Spring容器。
4. Springboot啓動時自動創建RpcClient實例。
打斷點調試服務,展示Rpc方法掃描流程。
修復調試中發現的問題。
講解注解中用到自定義ImportBeanDefinitionRegistrar子類,如何和@Import注解結合使用。
代理對象:生成Prc請求,將調用方法的元數據封裝進Request,利用Netty Channel發送到服務方。
通過CompletableFuture特性阻塞等待結果返回。
編寫關鍵步驟:completeRequest方法,將獲取的結果放進CompletableFuture中。
RpcClient接收到遠程調用請求時,需要分析請求内容並找出請求所對應的RPC方法。
通過反射調用該方法后將結果返回。
口誤:ApplicationContextAware的作用
RpcClient連接成功後,立即發送注冊信息到服務中心。
服務中心將RpcClient對應的Channel維護起來,當RPC請求到達服務中心時,通過保存的信息找到對應的RpcClient並將請求轉發過去。
自定注解啓動服務中心。
測試RpcClient能否連接到服務中心。
測試代理對象能否正常工作
全面演示整個RPC核心調用流程:
斷點分析每一個重要步驟:
從代理對象的構建開始
到消息請求的封裝和轉發
再到對應客戶端處理請求並調用自己暴露的RPC方法
最後將調用結果封裝成響應信息(RpcResponse)並返回給請求方。
修復代碼bug,並再展示。
利用Netty提供的IdleStateHandler定時檢查每個Channel的讀空閑,超時即斷開鏈接。
利用Netty提供的IdleStateHandler進行寫檢測,
客戶端定時寫出心跳信息。
測試和演示代碼
連接斷開后,客戶端指定5秒後重新嘗試連接
深入分析Springcloud OpenFeign源碼,講解OpenFeign是如何掃描注解並生成Rpc代理對象。
對核心類RpcClient進行抽象化,職責更清晰,更易於維護和拓展。
測試抽象層
編寫服務降級機制
測試服務降級代碼
測試服務降級代碼
講解改進原理:利用下級接口繼承Rpc接口,並掃描下級接口。
同時展示ClassPathScanningCandidateComponentProvider的默認掃描機制。
重寫方法通過TypeFilter自定義過濾條件,演示ClassPathScanningCandidateComponentProvider的限制
創建RemoteServiceScanner繼承ClassPathBeanDefinitionScanner。
自定義TypeFilter過濾規則。
自動完成BeanDefintion注冊。
抽取BeanDefinition並動態更改BeanClass,動態注入屬性和依賴,並完成代理對象構建。
測試並改進代理對象内部方法調用邏輯。
利用Recursive Calls找出繼承自RemoteService接口的二級接口並將其封裝進PrcRequest中。
Rpc的安全機制,擴展内容提示
講解Kryo的特點和使用方式,替換原先的JSON格式。
課程總結
這不是一門簡單的框架講解課,而是一場真正從 0 到 1 實作 RPC 框架的深度實戰之旅。
在這門課中,我將親手帶你編寫每一行代碼,從底層通信協議設計開始,到動態代理、序列化、Netty 處理流程、Spring Boot 整合、服務註冊與發現 —— 一步步構建出一套可運行、可擴展的輕量級 RPC 框架。
你將學會如何:
自定義 RPC 請求協議與消息格式
使用 Netty 打造高性能的通訊模塊
利用 Java 反射與動態代理完成遠端方法調用
運用 Spring Boot 的高級擴展介面,自動掃描與註冊遠端服務
設計並實作服務中心(註冊與發現)、連線池、異常處理與超時機制
設計並實現服務降級機制
架構出可應對真實分散式場景的通訊體系
這不只是帶你「了解原理」,而是讓你從一個框架使用者,晉升為能設計底層中間件的架構開發者。
我們不看 PPT,不複製現成代碼,每一行都親自寫,每一步都親自走。
這將是一次對你技術實力的全方位升級,為你的簡歷、面試與職涯發展打下紮實的底層功底。