上節課已經學習了grpc基本知識,對grpc有了初步的認識。本節課通過程式設計實現grpc程式設計。
我們想要實現的是通過grpc框架進行遠端服務呼叫,首先第一步應該是要有服務。利用之前所掌握的內容,grpc框架支援對服務的定義和生成。grpc框架預設使用protocol buffers作為介面定義語言,用於描述網路傳輸訊息結構。除此之外,還可以使用protobuf定義服務介面。
syntax = "proto3";
package message;
//訂單請求引數
message orderrequest
//訂單資訊
message orderinfo
//訂單服務service定義
service orderservice
我們通過proto檔案定義了資料結構的同時,還定義了要實現的服務介面,getorderinfo即是具體服務介面的定義,在getorderinfo介面定義中,orderrequest表示是請求傳遞的引數,orderinfo表示處理結果返回資料引數。
定義的proto檔案需要通過編譯,生成go語言**檔案,供客戶端程式和服務端程式使用。可以安裝go語言環境中的關於proto的外掛程式。
go get -a github.com/golang/protobuf/protoc-gen-go
可以通過基本編譯命令完成對.proto檔案的編譯.基礎編譯命令如下:
protoc --go_out=. *.proto
如果定義的.proto檔案,如本案例中所示,定義中包含了服務介面的定義,而我們想要使用grpc框架實現rpc呼叫。開發者可以採用protocol-gen-go庫提供的外掛程式編譯功能,生成相容grpc框架的golang語言**。只需要在基本編譯命令的基礎上,指定外掛程式的引數,告知protoc編譯器即可。具體的編譯生成相容grpc框架的服務**的命令如下:
protoc --go_out=plugins=grpc:. *.proto
在.proto定義好服務介面並生成對應的go語言檔案後,需要對服務介面做具體的實現。定義服務介面具體由orderserviceimpl進行實現,並實現getorderinfo詳細內容,服務實現邏輯與前文所述內容相同。不同點是服務介面引數的變化。詳細**實現如下:
type orderserviceimpl struct
//具體的方法實現
func (os *orderserviceimpl) getorderinfo(ctx context.context, request *message.orderrequest) (*message.orderinfo, error) ,
"201907310001": message.orderinfo,
"201907310002": message.orderinfo,
} var response *message.orderinfo
current := time.now().unix()
if (request.timestamp > current)
} else else
}return response, nil
}
使用grpc框架,首先實現服務端的程式。既然使用grpc框架來實現,就需要呼叫grpc進行服務方法的註冊以及監聽的處理。服務註冊和監聽處理實現如下:
func main()
server.serve(lis)
}
實現完服務端以後,實現客戶端程式。和服務端程式關係對應,呼叫grpc框架的方法獲取相應的客戶端程式,並實現服務的呼叫,具體程式設計實現如下:
func main()
defer conn.close()
orderserviceclient := message.neworderserviceclient(conn)
orderrequest := &message.orderrequest
orderinfo, err := orderserviceclient.getorderinfo(context.background(), orderrequest)
if orderinfo != nil
}
經過上述步驟後,程式及邏輯全部開發完成。程式執行,列印如下結果:
201907300001
衣服已付款
go語言 grpc入門
go get google.golang.org grpc1.編寫.proto描述檔案 hello.proto syntax proto3 package proto message string service helloservice2.使用protoc工具生成相應的go 生成的 與porto描...
go語言gRPC系列 二 為gRPC新增證書
3.改造服務端使用自簽證書 4.改造客戶端 單向認證 前情回顧 go語言grpc系列 一 grpc入門 之前我們演示的客戶端和服務端之間是沒有使用證書的,不是很安全。下面演示一下,服務呼叫之間加入自簽的證書驗證。生產環境以網上購買的證書為準 登入如下鏈結 安裝到某個目錄 進入安裝目錄的bin資料夾下...
go版本gRPC入門
本文通過乙個簡單的示例,了解如何在go中使用grpc。使用命令列安裝 使用以下命令安裝grpc go get google.golang.org grpc 獲取編譯器外掛程式protoc gen go,並將其安裝在 gobin路徑中,預設為 gopath bin。5 必須設定好 path環境變數,協...