我的是windows,將壓縮包bin目錄下的exe放到環境path目錄中即可。
然後獲取外掛程式支援庫
// grpc執行時介面編譯碼支援庫
// 從 proto檔案(grpc介面描述檔案) 生成 go檔案 的編譯器外掛程式
go get -u github.com/golang/protobuf/protoc-gen-go獲取go的grpc包(網路問題可參閱
go get google.golang.org/grpc新建
test.proto
示例:
syntax = "proto3";proto檔案語法詳解參閱:// 定義包名
package test;
// 可以定義多個服務,每個服務內可以定義多個介面
service waiter
rpc domd5 (req) returns (res) {}
} // 定義 req 訊息結構
message req
// 定義 res 訊息結構
message res
// ps:jsonstr和backjson只是隨手寫的名字,並沒有用json
然後將proto檔案編譯為go檔案
// protoc --go_out=plugins=grpc:注意:原則上不要修改編譯出來的protoc --go_out=plugins=grpc:./test/ ./test.proto
*.bp.go
檔案的**,因為雙方介面基於同乙個proto檔案編譯成自己的語言原始碼,此檔案只作為介面資料處理,業務具體實現不在*.bp.go
中。
本人也是剛接觸go,基於的demo在修改中理解grpc
其中中文注釋均為個人理解筆記,若有不嚴謹的地方,還望指正。
package mainimport (
"log"
"net"
"golang.org/x/net/context"
"google.golang.org/grpc"
"test"
"google.golang.org/grpc/reflection"
"fmt"
"crypto/md5"
)// 業務實現方法的容器
type server struct{}
// 為server定義 domd5 方法 內部處理請求並返回結果
// 引數 (context.context[固定], *test.req[相應介面定義的請求引數])
// 返回 (*test.res[相應介面定義的返回引數,必須用指標], error)
func (s *server) domd5(ctx context.context, in *test.req) (*test.res, error) , nil
}func main()
s := grpc.newserver() //建立grpc服務
/**註冊介面服務
* 以定義proto時的service為單位註冊,服務中可以有多個方法
* (proto編譯時會為每個service生成register***server方法)
* 包.註冊服務方法(grpc服務例項,包含介面方法的結構體[指標])
*/test.registerwaiterserver(s, &server{})
/**如果有可以註冊多個介面服務,結構體要實現對應的介面方法
* user.registerloginserver(s, &server{})
* minmovie.registerfbiserver(s, &server{})
*/// 在grpc伺服器上註冊反射服務
reflection.register(s)
// 將監聽交給grpc服務處理
err = s.serve(lis)
if err != nil
}
package main啟動服務端監聽,執行客戶端即可達成遠端呼叫import (
"log"
"os"
"golang.org/x/net/context"
"google.golang.org/grpc"
"test"
)func main()
// 函式結束時關閉連線
defer conn.close()
// 建立waiter服務的客戶端
t := test.newwaiterclient(conn)
// 模擬請求資料
res := "test123"
// os.args[1] 為使用者執行輸入的引數 如:go run ***.go 123
if len(os.args) > 1
// 呼叫grpc介面
tr, err := t.domd5(context.background(), &test.req)
if err != nil
log.printf("服務端響應: %s", tr.backjson)
}
go基於grpc構建微服務框架 服務註冊與發現
grpc 是谷歌開源的rpc框架,基於http2實現,並支援跨語言,目前基本涵蓋了主流語言.跨語言的實現主要得益於protobuf,通過編寫proto檔案,通過protobuf工具生成對應語言的類庫進行使用.對於go這樣一門新生語言來說,生態鏈還處於發展階段,微服務框架也是如此,下面將基於grpc ...
微服務優化之使用gRPC做微服務的內部通訊
grpc是乙個高效能的 開源的 普遍通用的rpc框架。簡單地說,它能夠幫助我們建立透明的服務端和客戶端通訊系統。google開發了grpc並且將其開源。通過它,乙個客戶端消費者服務可以像呼叫本地方法一樣,呼叫另一台主機上面的服務端方法。grpc本質上仍然遵循常規的remote procedure c...
微服務優化之使用gRPC做微服務的內部通訊
grpc是乙個高效能的 開源的 普遍通用的rpc框架。簡單地說,它能夠幫助我們建立透明的服務端和客戶端通訊系統。google開發了grpc並且將其開源。通過它,乙個客戶端消費者服務可以像呼叫本地方法一樣,呼叫另一台主機上面的服務端方法。grpc本質上仍然遵循常規的remote procedure c...