干翻Dubbo系列第十篇:Dubbo體系中ProtoBuf序列化方式詳解

文章說明


本文內容整理自《孫哥說Dubbo系列視頻課程》,孫帥老師課程細致、全面、深入、性價比極高。B站搜孫帥suns可以找到對應的試聽視頻,或者直接添加老師微信號suns45與他直接聯系

一:序列化概念

補充說明:
Kyro和Fst這兩種優秀的序列化方案都是適用于Java體系,換句話說,換個Go語言編寫的端就不好使了。

ProtoBuf這中序列化方式可以支持其他的語言。Java、go、php都是可以支持的。GRPC另外一種RPC的底層實現方式。

二:ProtoBuf序列化方式

1:引入依賴

(一):ProtoBuf依賴

        <dependency><groupId>com.google.protobuf</groupId><artifactId>protobuf-java</artifactId><version>3.22.2</version></dependency><dependency><groupId>com.google.protobuf</groupId><artifactId>protobuf-java-util</artifactId><version>3.22.2</version></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-serialization-protobuf</artifactId><version>2.7.23</version><exclusions><exclusion><artifactId>dubbo-common</artifactId><groupId>org.apache.dubbo</groupId></exclusion><exclusion><artifactId>dubbo-serialization-api</artifactId><groupId>org.apache.dubbo</groupId></exclusion><exclusion><artifactId>protobuf-java</artifactId><groupId>com.google.protobuf</groupId></exclusion><exclusion><artifactId>protobuf-java-util</artifactId><groupId>com.google.protobuf</groupId></exclusion></exclusions></dependency></dependencies><build><extensions><extension><groupId>kr.motd.maven</groupId><artifactId>os-maven-plugin</artifactId><version>1.7.1</version></extension></extensions><plugins><plugin><groupId>org.xolstice.maven.plugins</groupId><artifactId>protobuf-maven-plugin</artifactId><version>0.6.1</version><configuration><protocArtifact>com.google.protobuf:protoc:3.22.2:exe:${os.detected.classifier}</protocArtifact><outputDirectory>${basedir}/src/main/java</outputDirectory><clearOutputDirectory>false</clearOutputDirectory><protocPlugins><protocPlugin><id>dubbo</id><groupId>org.apache.dubbo</groupId><artifactId>dubbo-compiler</artifactId><version>0.0.2</version><mainClass>org.apache.dubbo.gen.dubbo.Dubbo3Generator</mainClass></protocPlugin></protocPlugins></configuration><executions><execution><goals><goal>compile</goal><goal>compile-custom</goal></goals></execution></executions></plugin></plugins></build>

protobuf-java、protobuf-java-uitl這兩個是Dubbo項目支持Protobuf的話,這兩個依賴是必有的。dubbo-serialization-protobuf這個是ProtoBuf的序列化依賴。需要排除自帶的Dubbo依賴。另外還需要把java和util這兩個依賴給排除掉。

此依賴配置是放到父項目的Pom.xml里邊。

(二):解決依賴編譯問題

Consumer和provider之間是通過網絡進行通信的,兩者有可能不同的語言編寫的。那兩者通信的時候都得將數據轉換為ProtoBuf這種中間格式來進行通訊。這樣就做到了跨語言的數據傳輸。一旦應用了ProtoBuf這種序列化方式。

ProtoBuf作為數據傳輸的中間格式,一旦應用了ProtoBuf作為序列化方式的。IDL是ProtoBuf作為中間的格式,是ProtoBuf的特有的預發,里邊都稱之為Message。這里邊涉及到一個編譯的問題,需要使用ProtoC進行編譯,使用ProtoC進行編譯的話,有兩種使用方式。1是直接本地安裝protoC,另外一種是使用maven插件的方式。我們maven插件即可。

應用這個插件的時候,我們需要注意這個版本必須與上述的protobuf-java版本保持一致,使用MAC操作系統的話,其中的版本不能低于3.17.3,低于這個版本是對這個蘋果的ARM架構是不支持的。Nacos是也有這個問題

2:ProtoBuf?件的編寫

ProtoBuf作為序列化方案,需要有一個傳輸數據的中間類型,這個中間類型就是ProtoBuf里邊的IDL,這個IDL大致有三塊內容:參數(請求數據)返回值(返回參數)這是兩個非常核心的內容,也稱之為Message。

當然還有第三個內容,那就是服務接口。服務接口溝通了Provider和Confumer,一個基于服務接口提供實現,另外一個通過服務接口創建代理。如果基于ProtoBuf來實現序列化的話,那么這個服務接口也需要在定義在IDL當中的。

ProtoBuf的IDL是.protobuf的這樣的一個文件。首先,我們使用的語法是proto3三個Java配置可選項。

這個文件叫做HelloService.proto,放到與API項目下和Java平級的proto目錄下。這個將來會被consumer和provider共用。

然后,這個proto文件會被protoC插件翻譯成Java類。

syntax = "proto3";生成的Java類放到不同的文件里
option java_multiple_files = true;
生成的代碼放到那個包下
option java_package = "com.suns";
最外層的類叫什么名字?
option java_outer_classname = "HelloProtocol";message HelloRequest {
string name = 1;
}
message HelloResponse {
string result = 1;
}
service HelloService {
rpc sayHello (HelloRequest) returns (HelloResponse);
}

3:ProtoC生成的Java接口

public class HelloServiceImpl implements HelloService {@Overridepublic HelloResponse sayHello(HelloRequest request) {System.out.println("HelloServiceImpl.sayHello request " + request.getName());return HelloResponse.newBuilder().setResult("this is sayHello result").build();}//異步的@Overridepublic CompletableFuture<HelloResponse> sayHelloAsync(HelloRequest request) {return CompletableFuture.completedFuture(sayHello(request));}
}

4:XML的配置方式

<dubbo:protocol name="dubbo" port="-1" serialization="protobuf"/>
<bean id="helloService" class="com.suns.service.HelloServiceImpl"/>
<dubbo:service interface="com.suns.HelloService" ref="helloService"/>

5:Boot的配置方式

dubbo:protocol:name: dubboport: -1serialization: protobuf

6:Consumer端調用

<dubbo:reference interface="com.suns.service.HelloService" id="helloSe
rvice"
url="dubbo://192.168.50.62:20880/com.suns.HelloServic
e?serialization=protobuf"/>

?7:Boot的方式

@DubboReference(url = "dubbo://192.168.50.62:20880/com.suns.HelloServi
ce?serialization=protobuf")

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

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

相關文章

設計模式-面試常問

1.單例模式 保證系統中&#xff0c;一個類&#xff0c;只有一個實例&#xff0c;并且提供對外訪問。 優點&#xff1a;只有一個對象&#xff0c;可以節省資源。適合頻繁創建銷毀對象的場景。 實現&#xff1a;要用到static&#xff0c;靜態私有對象。暴露單例的靜態方法。 &…

docker 學習--03 環境安裝(本人使用的win10 Linux也是在win10下模擬)

docker 學習–03 環境安裝&#xff08;本人使用的win10 Linux也是在win10下模擬&#xff09; docker 學習-- 01 基礎知識 docker 學習-- 02 常用命令 文章目錄 docker 學習--03 環境安裝&#xff08;本人使用的win10 Linux也是在win10下模擬&#xff09;[TOC](文章目錄) 1. wi…

【數學建模】邏輯回歸算法(Logistic Resgression)

邏輯回歸算法 簡介邏輯回歸與條件概率繪制sigmoid函數 簡介 邏輯回歸算法是一種簡單但功能強大的二元線性分類算法。需要注意的是&#xff0c;盡管"邏輯回歸"名字帶有“回歸”二字&#xff0c;但邏輯回歸是一個分類算法&#xff0c;而不是回歸算法。 我認為&#xff…

冉冉升起的星火,再度升級迎來2.0時代!

文章目錄 前言權威性評測結果 星火大模型多模態功能插件功能簡歷生成文檔問答PPT生成 代碼能力 福利 前言 前幾天從技術群里看到大家都在談論《人工智能大模型體驗報告2.0》里邊的內容&#xff0c;抱著好奇和學習的態度把報告看了一遍。看完之后瞬間被里邊提到的科大訊飛的星火…

2008-2020年全國各省綠色金融發展指數(含原始數據)

2008-2020年全國各省綠色金融發展指數&#xff08;含原始數據&#xff09; 1、時間&#xff1a;2008-2020年 2、范圍&#xff1a;30個省市 不含西藏 3、來源&#xff1a;原始數據整理自csmar、eps、wind等數據庫 4、原始數據指標&#xff1a; A股上市環保企業新增銀行貸款…

企業服務器數據庫遭到malox勒索病毒攻擊后如何解決,勒索病毒解密

網絡技術的發展不僅為企業帶來了更高的效率&#xff0c;還為企業帶來信息安全威脅&#xff0c;其中較為常見的就是勒索病毒攻擊。近期&#xff0c;我們公司收到很多企業的求助&#xff0c;企業的服務器數據庫遭到了malox勒索病毒攻擊&#xff0c;導致系統內部的許多重要數據被加…

HCIP VRRP技術

一、VRRP概述 VRRP&#xff08;Virtual Router Pedundancy Protocol&#xff09;虛擬路由器冗余協議&#xff0c;既能夠實現網關的備份&#xff0c;又能夠解決多個網關之間互相沖突的問題&#xff0c;從而提高網絡可靠性。 局域網中的用戶的終端通常采用配置一個默認網關的形…

【uniapp】 軟鍵盤彈出后fixed定位被頂上去問題

問題描述 當手機設計的導航欄為fixed定位上去時&#xff0c;輸入框獲取焦點就會把頂部自定義的導航欄頂到上面去&#xff0c;如下圖所示 解決辦法 輸入框設置 :adjust-position“false” <input type"text" :adjust-position"false" focus"i…

【Linux】多線程之單例模式

多線程之單例模式 什么是設計模式&#xff0c;都有哪些設計模式單例模式餓漢模式懶漢模式 什么是設計模式&#xff0c;都有哪些設計模式 設計模式就是一套被反復使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是為了可重用代碼、讓代碼更容易被他人理…

AI繪畫 | 一文學會Midjourney繪畫,創作自己的AI作品(快速入門+參數介紹)

一、生成第一個AI圖片 首先&#xff0c;生成將中文描述詞翻譯成英文 然后在輸入端輸入&#xff1a;/imagine prompt:Bravely running boy in Q version, cute head portrait 最后&#xff0c;稍等一會即可輸出效果 說明&#xff1a; 下面的U1、U2、U3、U4代表的第一張、第二張…

Nacos AP架構集群搭建(Windows)

手寫SpringCloud項目地址&#xff0c;求個star github:https://github.com/huangjianguo2000/spring-cloud-lightweight gitee:https://gitee.com/huangjianguo2000/spring-cloud-lightweigh 目錄&#xff1a; 一&#xff1a;初始化MySQL 二&#xff1a;復制粘貼三份Nacos文…

分類預測 | MATLAB實現GAPSO-BP遺傳算法組合粒子群算法優化BP神經網絡多輸入分類預測

分類預測 | MATLAB實現GAPSO-BP遺傳算法組合粒子群算法優化BP神經網絡多輸入分類預測 目錄 分類預測 | MATLAB實現GAPSO-BP遺傳算法組合粒子群算法優化BP神經網絡多輸入分類預測預測效果基本介紹模型描述程序設計參考資料 預測效果 基本介紹 1.分類預測 | MATLAB實現GAPSO-BP遺…

YoloV8優化:通道優先卷積注意力,效果秒殺CBAM和SE等 | 即插即用系列

??????本文獨家改進:通道優先卷積注意力,采用多尺度結構來增強卷積運算捕獲空間關系的能力,解決CBAM 整合了通道注意和空間注意,但它在其輸出特征的所有通道上強制執行一致的空間注意分布。相反,SE只整合了通道注意,這限制了它選擇重要區域的能力 通道優先卷積注意…

LabVIEW使用圖像處理進行交通控制性能分析

LabVIEW使用圖像處理進行交通控制性能分析 采用普雷維特、拉普拉斯、索貝爾和任意的空間域方法對存儲的圖像進行邊緣檢測&#xff0c;并獲取實時圖像。然而&#xff0c;對四種不同空間域邊緣檢測方法的核的性能分析。 以前&#xff0c;空路圖像存儲在數據庫中&#xff0c;道路…

【JAVA】變量的作用域與生存周期

個人主頁&#xff1a;【&#x1f60a;個人主頁】 系列專欄&#xff1a;【??初識JAVA】 文章目錄 前言變量的作用域變量的生命周期局部變量全局變量 前言 變量&#xff0c;我們學習過程中逃不掉的知識&#xff0c;無論在哪種語言中我們都需要學會去合理的運用它&#xff0c;今…

自然語言處理從入門到應用——LangChain:記憶(Memory)-[記憶的存儲與應用]

分類目錄&#xff1a;《自然語言處理從入門到應用》總目錄 使用SQLite存儲的實體記憶 我們將創建一個簡單的對話鏈&#xff0c;該鏈使用ConversationEntityMemory&#xff0c;并使用SqliteEntityStore作為后端存儲。使用EntitySqliteStore作為記憶entity_store屬性上的參數&am…

excel 下載方法封裝

1.首先需要拿到后端返回的URL下載地址 2.寫個下載方法 // url 接口返回的下載地址。例如&#xff1a;https://cancer-research.oss-cn-beijing.aliyuncs.com/yuance-platform-permission/校內共享數據導入模板.xlsx // name 文件名稱 例如&#xff1a; 校內共享數據導入模板 /…

(一)Unity開發Vision Pro介紹

1.介紹 1.1 介紹 VisionOS 可實現與現實世界無縫集成并與其他虛擬內容共存的 3D 多任務體驗。這為個人生產力、生活方式和娛樂應用打開了一個充滿新可能性的世界&#xff0c;并為開發人員打開了一個全新的市場。然而&#xff0c;它也帶來了圍繞多任務處理和與身體互動的新挑戰…

Aspera替代方案:探索這些安全且可靠的文件傳輸工具

科技的發展日新月異&#xff0c;文件的傳輸方式也在不斷地更新換代。傳統的郵件附件、FTP等方式已經難以滿足人們對于傳輸速度和安全性的需求了。近年來&#xff0c;一些新興的文件傳輸工具受到了人們的關注&#xff0c;其中除了知名的Aspera之外&#xff0c;還有許多可靠安全的…

FPGA_學習_15_IP核_VIO

前一篇博客我們提到在線調試的時候&#xff0c; 可執行文件只要燒進板子&#xff0c;程序它就會自己跑起來&#xff0c;不會等你點 這個按鈕&#xff0c;它才開始跑。我們測試的模塊中&#xff0c;里面可能有幾個我們關心的信號&#xff0c;它會在程序剛運行很短的時間內發生狀…