最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Golang中g(shù)RPC內(nèi)置Trace的實(shí)現(xiàn)

 更新時(shí)間:2025年03月03日 10:46:41   作者:兩片空白  
gRPC內(nèi)置了基于golang.org/x/net/trace包的客戶端和服務(wù)端請(qǐng)求追蹤,默認(rèn)開(kāi)啟狀態(tài),可以查看事件和請(qǐng)求日志,幫助調(diào)試,具有一定的參考價(jià)值,感興趣的可以了解一下

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)文章

  • 從零開(kāi)始學(xué)Golang的接口

    從零開(kāi)始學(xué)Golang的接口

    本文主要介紹了從零開(kāi)始學(xué)Golang的接口,原文中根據(jù)實(shí)例編碼詳細(xì)介紹的十分詳盡,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 詳解Golang五種原子性操作的用法

    詳解Golang五種原子性操作的用法

    本文主要介紹了詳解Golang五種原子性操作的用法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Golang創(chuàng)建第一個(gè)web項(xiàng)目(Gin+Gorm)

    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é)

    Golang關(guān)鍵字select的常用用法總結(jié)

    這篇文章主要為大家詳細(xì)介紹了golang中select關(guān)鍵字的常用用法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-10-10
  • Gin框架令牌桶限流實(shí)戰(zhàn)指南

    Gin框架令牌桶限流實(shí)戰(zhàn)指南

    限流是一種通過(guò)控制請(qǐng)求處理速率來(lái)保護(hù)系統(tǒng)的技術(shù),它能有效防止服務(wù)器因突發(fā)流量或惡意攻擊而過(guò)載,確保服務(wù)的穩(wěn)定性和可用性,本文就來(lái)介紹一下Gin 框架令牌桶限流的實(shí)現(xiàn),感興趣的可以了解一下
    2025-10-10
  • Golang性能優(yōu)化的技巧分享

    Golang性能優(yōu)化的技巧分享

    性能優(yōu)化的前提是滿足正確可靠、簡(jiǎn)潔清晰等質(zhì)量因素,針對(duì)?Go語(yǔ)言特性,本文為大家整理了一些Go語(yǔ)言相關(guān)的性能優(yōu)化建議,感興趣的可以了解一下
    2023-07-07
  • Go?連接?MySQL之?MySQL?預(yù)處理詳解

    Go?連接?MySQL之?MySQL?預(yù)處理詳解

    Go語(yǔ)言提供了豐富的庫(kù)和工具,可以方便地連接MySQL數(shù)據(jù)庫(kù)。MySQL預(yù)處理是一種提高數(shù)據(jù)庫(kù)操作效率和安全性的技術(shù)。Go語(yǔ)言中的第三方庫(kù)提供了MySQL預(yù)處理的支持,通過(guò)使用預(yù)處理語(yǔ)句,可以避免SQL注入攻擊,并且可以提高數(shù)據(jù)庫(kù)操作的效率。
    2023-06-06
  • go原生庫(kù)的中bytes.Buffer用法

    go原生庫(kù)的中bytes.Buffer用法

    這篇文章主要介紹了go原生庫(kù)的中bytes.Buffer用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • Golang接口型函數(shù)使用小結(jié)

    Golang接口型函數(shù)使用小結(jié)

    接口函數(shù)指的是用函數(shù)實(shí)現(xiàn)接口,這樣在調(diào)用的時(shí)候就會(huì)非常簡(jiǎn)便,這種方式適用于只有一個(gè)函數(shù)的接口,這里以迭代一個(gè)map為例,演示這一實(shí)現(xiàn)的技巧,對(duì)Golang接口型函數(shù)使用知識(shí)感興趣的朋友一起看看吧
    2022-06-06
  • golang中context的作用詳解

    golang中context的作用詳解

    這篇文章主要介紹了golang中context的作用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01

最新評(píng)論

吴忠市| 泸定县| 高雄市| 和静县| 辽阳县| 金溪县| 墨脱县| 宁乡县| 思南县| 沁阳市| 慈溪市| 柏乡县| 都匀市| 遂川县| 凉山| 永善县| 濮阳市| 双流县| 含山县| 泗洪县| 平武县| 安塞县| 聊城市| 阿瓦提县| 白玉县| 保靖县| 湾仔区| 明光市| 彭阳县| 正安县| 柏乡县| 曲麻莱县| 临武县| 收藏| 松江区| 大邑县| 安阳县| 八宿县| 高青县| 京山县| 涪陵区|