grpc簡單教程
簡介:
grpc是谷歌的一個開源的rpc(遠端服務呼叫)框架,可以讓各個語言按照指定的規則通過http2協議相互呼叫,這個規則是用Protocol Buffer(谷歌的一個資料描述語言)寫的一個.proto檔案,grpc的目的就是為了讓服務呼叫更方便。
目前支援的語言有C, C++,C#,Java, Node.js, Python,Go等,大部分語言都是通過外掛根據.proto檔案生成對應的程式碼,用生成好的程式碼,建立或呼叫grpc服務。
grpc的介面呼叫分為四類
1.普通呼叫
2.請求流呼叫
3.響應流呼叫
4.雙向流呼叫
從.proto檔案開始
syntax | 指定語言版本 |
option | 修改配置選項 |
service | 宣告一個服務 |
rpc | 宣告一個方法 |
resturns | 方法的返回值 |
message | 定義一個訊息型別 |
repeated | 陣列 |
stream | 用流來互動 |
一個例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
指定一個版本:
1 |
|
針對java的程式碼生成的一些配置
1 2 |
|
用 message 定義了一個請求訊息,和一個返回訊息
1 2 3 4 5 6 7 8 9 10 11 |
|
用 service 宣告瞭一個服務,用 rpc 宣告一個方法
1 2 3 4 |
|
說正經的:
想使用grpc要先做一些配置
新增grpc的包
1 2 3 4 5 |
|
新增編譯.proto檔案用的外掛
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
新增.proto檔案的編譯工具
1 2 3 4 5 6 |
|
protoc工具通過.proto檔案生成對應的java對應的類
1 |
|
protoc-gen-grpc-java工具通過.proto檔案生成grpc的工具類
1 |
|
這是生成grpc工具類存放的資料夾的名字
1 |
|
要編輯的.proto檔案的路徑
1 |
|
這個是為下載上面工具用的,他可以提供一些變數,
os.detected.classifier變數可以根據當前系統的型別來下載對應的工具
1 2 3 4 5 |
|
這是上面兩個編譯工具用到的命令,當用maven編譯專案時會執行這兩個命令
1 2 |
|
真的,說正經的:
用maven編譯一下
會生成兩個資料夾
java資料夾是protoc編譯工具生成的程式碼
grpc資料夾是protoc-gen-grpc-java編譯工具生成的工具類
這兩個檔案就是我們在.proto檔案中定義的訊息型別(經常被用到)
這兩個是為訊息型別的一個介面,裡面有get方法(不會被用到)
這個是對訊息的一個描述(更不會被用到)
這個是grpc的工具類(會被用到)
這次真的要說正經的了,我們要用這些grpc為我們生成出來的奇怪的東西,寫奇怪的東西了:
1.普通介面
1.1.服務端
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
|
首先建立一個服務類叫JavaGrpcServer 繼承 TestServiceGrpc.TestServiceImplBase 重寫裡面的method方法
1 |
|
TestServiceGrpc.TestServiceImplBase 就是我們在.proto檔案中定義的服務
用 ServerBuilder 的 forProt 方法來指定一個埠,用 addService 來新增一個服務類,也就是當前類
1 2 3 4 |
|
grpc生成的訊息類有點獨特,他們沒有set方法,只有get方法,想要賦值,要用他們的一個內部類Builder來間接賦值
1 |
|
新增返回值,完成呼叫
1 2 |
|
StreamObserver(流觀察者) 這個介面會在後面詳細說,這裡只需要知道 onNext 是新增返回值,onCompleted 是完成呼叫即可
這裡利用了spring的 InitializingBean 介面和 Component 註解在bean初始化的時候建立服務
好了,服務端搞完了,下一個
1.2.客戶端
先寫一個叫 Functional 的函式式介面,方便呼叫
1 2 3 4 5 6 |
|
建一個叫 JavaGrpcClient 的類 來呼叫介面
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
|
用 ManagedChannelBuilder 的 forAddress 方法來連線服務端,usePlaintext的意思是使用明文不加密(應該可以加密)
1 2 3 4 5 6 7 |
|
用 TestServiceGrpc.newBlockingStub 來建立一個例項
1 2 |
|
再搞一個測試
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
讓我們把這兩個專案跑起來,看一下
看!斷點經過了建立服務那裡,而且沒有報錯,服務端跑起來了!
看!客戶端要!
他進來了,連線了服務端,建立了例項,馬上就要....
他帶著引數過來了,被斷點攔住了
給他一個返回值,結束
走你!
拿到了返回值,完結!撒花!
等等!
這只是普通的介面
還有三種介面呢!
相關文章
- gRPC的Golang簡單應用RPCGolang
- gRPC應用實戰:(二)gRPC環境搭建以及簡單demoRPC
- golang開發一個簡單的grpcGolangRPC
- gRPC簡介RPC
- butterfly簡單使用教程
- MacDroid使用簡單教程~Mac
- PHP PDO 簡單教程PHP
- ASP.NETCore簡介-ASP.NETCore基礎教程-簡單教程,簡單程式設計ASP.NETNetCore程式設計
- Mackdown簡單的使用教程Mac
- docker簡單實用教程Docker
- InnoSetup簡單教程一,安裝使用和簡單測試
- [教程]一份簡單易懂的 TensorFlow 教程
- linux 安裝 mysql簡單教程LinuxMySql
- Android開發簡單教程.docAndroid
- 表單驗證教程簡介
- 簡單的 Go 入門教程Go
- WebGL簡易教程(一):第一個簡單示例Web
- grpc-go使用教程之helloworldRPCGo
- 最簡單的SpringBoot整合MyBatis教程Spring BootMyBatis
- [2]SpinalHDL教程——Scala簡單入門
- Google Chrome 除錯JS簡單教程GoChrome除錯JS
- 簡單明朗的 RNN 寫詩教程RNN
- 動手實現一個簡單的 rpc 框架到入門 grpc (下)RPC框架
- 動手實現一個簡單的 rpc 框架到入門 grpc(上)RPC框架
- 動手實現一個簡單的 rpc 框架到入門 grpc (上)RPC框架
- 螞蟻部落Git教程簡單介紹Git
- 簡單瞭解Ruby與自學教程
- 超簡單 Python 安全批量打水印教程!Python
- Kubernetes與Spring Boot簡單HelloWorld教程 - MarounSpring Boot
- Flink安裝極簡教程-單機版
- 簡單的 Shell 指令碼入門教程指令碼
- 用js玩轉Scriptable,超簡單教程JS
- 在MySQL中使用序列的簡單教程MySql
- Golang gRPC學習(03): grpc官方示例程式route_guide簡析GolangRPCGUIIDE
- gRPC應用實戰:(一)簡介RPC
- Spring Boot+Spring Security+Thymeleaf 簡單教程Spring Boot
- 製作簡單的個人網頁教程網頁
- Linux安裝rabbitmq簡單教程(Centos6.5)LinuxMQCentOS