1 RPC的闡述
rpc就是遠端呼叫的意思 客戶端傳送一個資料 服務端接手並且解析 中間過程互相建立tcp 連線 ,指定的協議規範 可以用以下這個協議 為什麼要用它呢 現如今時代異構系統互相呼叫 方便而且傳輸不比json慢
Google Protocol Buffer( 簡稱 Protobuf)
輕便高效的序列化資料結構的協議,可以用於網路通訊和資料儲存。
特點:效能高、傳輸快、維護方便,反正就是各種好,各種棒
一些第三方rpc庫都會支援protobuf
2 RPC的使用方式
2.1 安裝
https://github.com/protocolbuffers/protobuf/releases/latest
下載它 並且解壓 把protoc39\bin 加入到你的環境變數
這是protobuf編譯器,將.proto檔案,轉譯成protobuf的原生資料結構
2.2 GO中的使用方式
2.2.1 首先你要使用go的一個外掛 go get github.com/golang/protobuf/protoc-gen-go 此時會在你的GOPATH 的bin目錄下生成可執行檔案. protobuf的編譯器外掛protoc-gen-go
2.2.2 建立如下中間檔案叫做prod.proto
syntax="proto3";
message ProdRequest {
int32 prod_id =1; //傳入的商品ID
}
message ProdResponse{
int32 prod_stock=1;//商品庫存
}
然後執行 protoc --go_out=../Prod.proto 就會生成一個協議檔案,大致完成。
3 RPC 的服務端簡單使用 【以GO做個範列】
3.3.1 建立一個服務結構體檔案Prod.proto
syntax="proto3";
package services;
message ProdRequest {
int32 prod_id =1; //傳入的商品ID
}
message ProdResponse{
int32 prod_stock=1;//商品庫存
}
3.3.2 建立一個服務結構體
type ProdService struct {
}
func(this *ProdService) GetProdStock(ctx context.Context, request *ProdRequest) (*ProdResponse, error) {
return &ProdResponse{ProdStock:20},nil
}
3.3.3 建立一個RPC服務 埠8081
rpcServer:=grpc.NewServer()
services.RegisterProdServiceServer(rpcServer,new(services.ProdService))
lis,_:=net.Listen("tcp",":8081")
rpcServer.Serve(lis)
注意:使用此包來開發
google.golang.org/grpc
4 RPC的客戶端呼叫 【以GO做個範列】
引入 google.golang.org/grpc 這個包
client,err:=grpc.Dial(":8081",grpc.WithInsecure())
if err!=nil{
log.Fatal(err)
}
defer client.Close()
prodClient:=services.NewProdServiceClient(client)
res,err:=prodClient.GetProdStock(
context.Background(),
&services.ProdRequest{ProdId:12},
)
if err!=nil{
log.Fatal(err)
}
fmt.Println(res.ProdStock)
本作品採用《CC 協議》,轉載必須註明作者和本文連結