Golang中g(shù)RPC內(nèi)置Trace的實(shí)現(xiàn)
gRPC內(nèi)置了客戶端和服務(wù)端的請(qǐng)求追蹤,基于golang.org/x/net/trace包實(shí)現(xiàn),默認(rèn)是開(kāi)啟狀態(tài),可以查看事件和請(qǐng)求日志,對(duì)于基本的請(qǐng)求狀態(tài)查看調(diào)試也是很有幫助的,客戶端與服務(wù)端基本一致,這里以服務(wù)端開(kāi)啟trace server為例,代碼如下。
目錄結(jié)構(gòu)

代碼
- 服務(wù)端
package main
import (
"context"
"fmt"
"log"
"net"
"net/http"
hello "sample-app/grpc/proto"
"golang.org/x/net/trace"
"google.golang.org/grpc"
)
// gprc服務(wù)器地址
var Addr = "127.0.0.1:8080"
// 定義結(jié)構(gòu) 實(shí)現(xiàn)約定接口
type helloService struct{}
// 服務(wù)
var HelloService = helloService{}
// 實(shí)現(xiàn)服務(wù)接口
func (h helloService) SayHello(c context.Context, req *hello.HelloRequest) (*hello.HelloResponse, error) {
resp := new(hello.HelloResponse)
resp.Message = fmt.Sprintf("Hello %s", req.Name)
return resp, nil
}
func init() {
//使用trace
grpc.EnableTracing = true
}
func main() {
ls, err := net.Listen("tcp", Addr)
if err != nil {
fmt.Println(err)
return
}
//實(shí)例化grpc server
server := grpc.NewServer()
//注冊(cè)HelloService
hello.RegisterHelloServer(server, HelloService)
//開(kāi)啟trace
go startTrace()
fmt.Println("Listen on " + Addr)
server.Serve(ls)
}
func startTrace() {
trace.AuthRequest = func(req *http.Request) (any, sensitive bool) {
return true, true
}
go http.ListenAndServe(":8081", nil)
log.Println("trace listen on 8081")
}
這里我們開(kāi)啟一個(gè)http服務(wù)監(jiān)聽(tīng)8081端口,用來(lái)查看grpc請(qǐng)求的trace信息。
運(yùn)行:

- 客戶端
package main
import (
"context"
"fmt"
hello "sample-app/grpc/proto"
"google.golang.org/grpc"
)
const (
Addr = "127.0.0.1:8080"
)
func main() {
conn, err := grpc.Dial(Addr, grpc.WithInsecure())
if err != nil {
fmt.Println("Dial fail", err)
return
}
defer conn.Close()
//初始化服務(wù)器
c := hello.NewHelloClient(conn)
//單項(xiàng)請(qǐng)求
req := new(hello.HelloRequest)
req.Name = "gRPC"
resp, err := c.SayHello(context.Background(), req)
if err != nil {
fmt.Println("say hello fail", err)
return
}
fmt.Println(resp.Message)
}
- 請(qǐng)求

服務(wù)器事件查看
訪問(wèn):localhost:8081/debug/events,結(jié)果如圖所示:

可以看到服務(wù)端注冊(cè)的服務(wù)和服務(wù)正常啟動(dòng)的事件信息。
請(qǐng)求日志信息查看
訪問(wèn):localhost:8081/debug/requests

這里可以顯示最近的請(qǐng)求狀態(tài),包括請(qǐng)求的服務(wù),參數(shù),耗時(shí),響應(yīng),對(duì)于簡(jiǎn)單的狀態(tài)查看還是很方便,默認(rèn)顯示最近10條記錄。
到此這篇關(guān)于Golang中g(shù)RPC內(nèi)置Trace的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Golang gRPC內(nèi)置Trace內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Golang創(chuàng)建第一個(gè)web項(xiàng)目(Gin+Gorm)
本文主要介紹了Golang創(chuàng)建第一個(gè)web項(xiàng)目(Gin+Gorm),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-06-06
Golang關(guān)鍵字select的常用用法總結(jié)
這篇文章主要為大家詳細(xì)介紹了golang中select關(guān)鍵字的常用用法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-10-10

