09-netty基礎-手寫rpc-原理-01

netty系列文章:

01-netty基礎-socket
02-netty基礎-java四種IO模型
03-netty基礎-多路復用select、poll、epoll
04-netty基礎-Reactor三種模型
05-netty基礎-ByteBuf數據結構
06-netty基礎-編碼解碼
07-netty基礎-自定義編解碼器
08-netty基礎-自定義序列化和反序列化
09-netty基礎-手寫rpc-原理-01
10-netty基礎-手寫rpc-定義協議頭-02
11-netty基礎-手寫rpc-支持多序列化協議-03
12-netty基礎-手寫rpc-編解碼-04
13-netty基礎-手寫rpc-消費方生成代理-05
14-netty基礎-手寫rpc-提供方(服務端)-06

1 涉及到的知識點

  • netty自定義編解碼(自定義消息頭、傳輸對象)
  • ?支撐多序列化實現
  • 服務消費方使用spring生成代理對象并放入到spring容器中
  • 使用netty實現客戶端和服務端通信代碼
  • 使用EnvironmentAware實現用yml中讀取配置
  • ......

2 代碼以及分支說明

地址:https://gitee.com/huyanqiu6666/netty-rpc-protocol.git

分支說明:

分支名描述
master搭建多模塊的項目
20250805-01-base-provider服務端協議api
20250805-02-protocol自定義協議相關的類
20250805-03-serializer序列化相關的類
20250805-04-encoder-decoder編解碼
20250805-05-spring-bean增加spring為客戶端增加代理類、依賴注入等
20250806-06-netty-server-client增加客戶端連接服務端
20250806-07-consumer-config增加客戶端配置,ip、端口號等
20250806-08-provider-config?服務端編寫以及配置

3 項目結構

4 rpc流程

1、自定義服務提供方和消費方注解 BonnieRemoteReference(消費方)、BonnieRemoteService(提供方)
2、自定義協議頭(包含序列化方式)、協議體
3、支撐多種序列化方式,比如java、json
4、自定義編解碼
5、客戶端啟動的時候在spring容器加載bean定義文件之后,初始化之前,為添加了BonnieRemoteReference的類屬性生成Bean的代理對象放入到spring容器中
6、服務端啟動的時候,在spring的對象初始化完成之后,識別出被BonnieRemoteService修飾的類,將這種類下的所有方法都緩存到Map中,以供后續處理客戶端的請求反射調用

后面的文章會詳細介紹涉及到的實現rpc的重點知識

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/92656.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/92656.shtml
英文地址,請注明出處:http://en.pswp.cn/web/92656.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Windows 小知識:Winodws 文件與文件夾名不區分大小寫

專欄導航 上一篇:Windows 編程輔助技能:速覽定義 回到目錄 下一篇:無 本節前言 本節來分享一個小的知識點,具體地,我們在下面來細說。 一. Windows 系統的文件與文件夾的名字,不區分大小寫 請大家…

嵌套-列表存儲字典,字典存儲列表,字典存儲字典

字典存儲列表aliens []for alien in range(10):new_alien {"id": alien, "color": "green", "speed": "slow" , "points": 20}aliens.append(new_alien)for alien in aliens[:5]:print(alien) print("...&…

個人筆記Mybatis2

4.配置解析4.1核心配置文件mybatis-config.xmlMyBatis配置包含對MyBatis行為方式有顯著影響的設置和屬性在 MyBatis 中有兩種類型的事務管理器 (也就是 type"[JDBC|MANAGED]”configuration(配置) properties(屬性) settings(設置) typeAliases(類型別名) typeHandlers(類…

使用 Maxwell 和 RabbitMQ 監控 Mysql Flowable 表變更

為什么需要監控數據庫變化?當 Flowable 表中的數據發生變化(例如插入新任務、更新狀態或刪除記錄),我們可能需要觸發其他操作,比如通知用戶、更新儀表盤或啟動新流程。Maxwell 可以讀取 MySQL 的二進制日志&#xff08…

MySQL面試題及詳細答案 155道(041-060)

《前后端面試題》專欄集合了前后端各個知識模塊的面試題,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs&…

mysql_mcp_server_pro源碼部署及啟動報錯新手指南:讓智能體長出手來直接獲取到最底層的數據

文章目錄 源碼部署 1.克隆項目地址 2.創建虛擬環境 3.激活環境 4.進入項目目錄下 5.安裝依賴 6.進入到src目錄 7.在當前目錄下,新建一個.env文件 8.配置數據庫信息 9.啟動項目 10.啟動權限管理啟動項目 啟動報錯了: 問題現象與直接原因 解決方案與操作步驟 方案1:允許忽略未定…

jupyter服務器創建賬戶加映射對外賬戶地址

文章目錄一、創建test1-test10用戶(跳過已存在的test3)二、檢查必要組件是否安裝解決方法:用緊湊格式避免換行解析錯誤核心修復說明:使用方法:以下是根據需求生成的命令、檢查腳本及啟動腳本,按步驟執行即可…

DDR中的POD與ODT

一、POD(Pseudo Open Drain)技術1. 定義與工作原理POD(偽開漏) 是DDR4/LPDDR4引入的電壓標準與驅動架構,替代傳統的SSTL(Stub Series Terminated Logic)。其核心特征是將上拉電源從VDDQ改為VTT&…

企業架構之導論(1)

一、企業架構是什么 企業架構是對企業業務、數據、應用、技術四大核心領域及其相互關系的系統化描述與設計框架。它像一張“城市藍圖”,確保業務戰略能精準映射到IT落地: 本質:是連接業務戰略(做什么)與技術執行(怎么做)的結構化方法論。 核心組件: 業務架構:定義業…

實戰:在已有K8S集群如何新增和刪除Node節點

本篇文章將分享一下如何在已有集群添加新節點和刪除現有節點1 新增節點到K8S集群新增節點可以分為準備節點、配置節點和將其加入集群三步。1.1 準備新節點準備一個相同操作系統的主機作為新節點。參考以前部署的文章:實戰部署k8s 1.28版本集群,跟著操作到…

C++ 黑馬 內存分配模型

一, 內存分配模型內存總共有四個分區1 代碼區 主要用來存儲二進制代碼,由操作系統進行管理2 棧區 由編譯器自己進行釋放和分配,例如函數的傳遞的參數,局部變量,const修飾的局部常量等等....3 堆區 由程序員自己分配和釋放&am…

【華為倉頡編程語言】運行第一個倉頡程序

歡迎來到倉頡編程語言的第一個實戰課程。 上節課我們成功安裝了倉頡工具鏈,今天讓我們一起編寫并運行第一個倉頡程序。相信很多同學都還記得學習第一門編程語言時寫的"Hello World"程序,那種看到程序成功運行的激動心情。今天,我們…

利用DeepSeek改寫并增強測試Duckdb和sqlite的不同插入方法性能

在前文基礎上,好奇作為事務型數據庫的SQLite表現怎么樣,讓DeepSeek來幫忙。 提示詞 請仿照附件編寫用python插入sqlite數據的測試函數,如果sqlite3沒有對應方法就省略 import sqlite3 import pandas as pd import timemethods [字符串拼接, …

進程管理塊(PCB):操作系統進程管理的核心數據結構

進程管理塊(PCB):操作系統進程管理的核心數據結構在現代操作系統中,進程管理塊(Process Control Block, PCB) 是內核用來描述、管理和控制進程生命周期的最核心、最關鍵的數據結構。它就像是一個進程的“身…

線程的sleep、wait、join、yield如何使用?

sleep:讓線程睡眠,期間會出讓cpu,在同步代碼塊中,不會釋放鎖 wait(必須先獲得對應的鎖才能調用):讓線程進 入等待狀態,釋放當前線程持有的鎖資源線程只有在notify 或者notifyAll方法調用后才會被喚醒,然后去爭奪鎖. join: 線程之間協同方式,使…

2025年服裝智能跟單系統TOP3推薦榜單

TOP1領軍者首選推薦:金蝶服裝系統【★★★★★】 在服裝智能跟單系統的領域,金蝶服裝系統憑借其強大的功能和卓越的性能脫穎而出,成為眾多企業的首選。盡管本文標題提及的是另一份榜單,但值得一提的是,金蝶系統若參與評…

基于FFmpeg的B站視頻下載處理

起因是這樣的一天,本人在B站客戶端緩存了一個視頻,用于學習參考等學術交流,但是視頻和音頻卻是分開且通過Win Hex查看發現文件頭含有9個“30”,想到一個個手動刪字節不如讓程序取代,便有了本文章這一篇文章發布之前&am…

【Vue Router】路由模式、懶加載、守衛、權限、緩存

前言 Vue Router 是 Vue 生態中處理頁面跳轉的核心工具,它解決了單頁應用中 URL 管理、組件切換、狀態維護等關鍵問題,同時提供了豐富的功能(如動態路由、嵌套路由、路由守衛)。除了經常用到的路由配置以外,我們還需了…

Linux epoll 實現詳解 (fs/eventpoll.c)

核心數據結構分析 1. struct eventpoll (epoll 實例核心結構) c struct eventpoll {struct mutex mtx; // 保護 epoll 結構的互斥鎖wait_queue_head_t wq; // epoll_wait() 使用的等待隊列wait_queue_head_t poll_wait; // 文件 poll() 使用的等待隊列struc…

【牛客刷題】小紅的項鏈(字節跳動面試題)

文章目錄 一、題目介紹 1.1 輸入描述 1.2 輸出描述 1.3 示例 二、算法設計思路 三、流程圖 四、題解實現 五、復雜度分析 六、關鍵算法知識點 一、題目介紹 原題鏈接:https://www.nowcoder.com/practice/3da065cab096478eb603bbfca5af8b02 小紅將 n n n個珠子排成一排,然后…