目錄
- 前言
- 演示代碼
- 小結
- 推薦閱讀
前言
上篇文章《Go - 如何撰寫 ProtoBuf 插件 (二) 》,分享了基于 自定義選項 定義了 interceptor 插件,然后在 helloworld.proto 中使用了插件,最后在 golang 代碼中獲取到使用的插件資訊,
接上篇,繼續分享,
既然獲取到了插件資訊,我們就可以使用它們,本文主要分享在 grpc.ServerOption 中的 grpc.UnaryInterceptor 中使用,
演示代碼
還是以上篇文章中 helloworld.proto 為例,
// 生成 helloworld.pb.go
// 生成 helloworld_grpc.pb.go
// 使用的 protoc --version 為 libprotoc 3.18.1
// 使用的 protoc-gen-go --version 為 protoc-gen-go v1.27.1
// 使用的 protoc-gen-go-grpc --version 為 protoc-gen-go-grpc 1.1.0
// 在根目錄下執行 protoc 命令
protoc --go_out=helloworld/gen --go-grpc_out=helloworld/gen helloworld/helloworld.proto
一、基于上篇文章中獲取 options 的代碼進行修改,主要是將其存入到結構體即可,
// 演示代碼,結構體
var handlers = &struct {
Methods map[string]*options.MethodHandler // FullMethod : Handler
Services map[string]*options.ServiceHandler // FullMethod : Handler
}{
Methods: make(map[string]*options.MethodHandler),
Services: make(map[string]*options.ServiceHandler),
}
二、在 grpc.NewServer 中使用攔截器,
// 演示代碼
serverOptions := []grpc.ServerOption{
grpc.UnaryInterceptor(unaryServerInterceptor()),
}
srv := grpc.NewServer(serverOptions...)
resolveFileDescriptor() // 決議 options 擴展項
三、在 unaryServerInterceptor() 方法中,可以根據當前請求的服務名和方法名獲取到對應設定的 options,
// 演示代碼
fullMethod := strings.Split(info.FullMethod, "/")
serviceName := fullMethod[1]
// 獲取 service options
getServiceHandler(serviceName)
// 獲取 method options
getMethodHandler(info.FullMethod)
四、自己寫一個 grpcclient 呼叫一下即可,
--- /helloworld.Greeter/SayHello1 ---
service use interceptor authorization: login_token
method use interceptor whitelist: ip_whitelist
method use interceptor logger: true
至此,在 grpc.UnaryInterceptor 中就可以獲取到 options 了,其他演示代碼我就不貼了,
最后,通過獲取到的 options,便可以執行自己定義的具體方法,
小結
通過最近的 “如何撰寫 ProtoBuf 插件” 這三篇文章,相信你對撰寫 ProtoBuf 插件有一點小的認識,希望對你能夠有所幫助,
推薦閱讀
- Go - 如何撰寫 ProtoBuf 插件 (二) ?
- Go - 如何撰寫 ProtoBuf 插件 (一) ?
- Go - 關于 protoc 工具的小疑惑
- Go - 關于 .proto 檔案的小思考
- Go - 基于逃逸分析來提升程式性能

作者:新亮筆記(關注公眾號,可申請添加微信好友)
出處:https://www.cnblogs.com/xinliangcoder
本文著作權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/412898.html
標籤:其他
