亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 grpc-go 的 stat/HandleRPC 中訪問有關請求和響應負載的信息

在 grpc-go 的 stat/HandleRPC 中訪問有關請求和響應負載的信息

Go
HUWWW 2022-12-26 10:20:55
我正在使用 stats/HandleRPC() 發出一些關于 RPC 持續時間的指標,當我收到 stats/End 數據時,我想用一些可以從傳入和傳出有效負載中提取的信息來標記這些指標。實現這一目標的最佳方法是什么?func (h *myStatsHandler) HandleRPC(ctx context.Context, rpcStats stats.RPCStats) {    switch stat := rpcStats.(type) {    case *stats.End:        durationMs := stat.EndTime.Sub(stat.BeginTime).Seconds() * 1000.0        // Now before sending this value, I need to know, for example the value of a specific key in the request payload, or whether the response is nil or not     }}
查看完整描述

1 回答

?
撒科打諢

TA貢獻1934條經驗 獲得超2個贊

在您的 實現中TagRPC,您可以創建一個結構并將指向它的指針添加到上下文中。然后通過對 的連續調用在其中添加信息HandleRPC。因此,如果您需要 Payload 中僅在*stats.InPayload調用中可用的內容,您可以將其拉出并將其存儲在添加到上下文的結構中,然后在HandleRPC再次調用時訪問它*stats.End


type recorderCtxKey struct{}


type recorder struct {

    size   int64

}


func (sl *statsHandler) TagRPC(ctx context.Context, info *stats.RPCTagInfo) context.Context {

    return context.WithValue(ctx, rpcStatCtxKey{}, &recorder{})

}


func (h *statsHandler) HandleRPC(ctx context.Context, rpcStats stats.RPCStats) {

    switch stat := rpcStats.(type) {

    case *stats.InPayload:

        r, _ := ctx.Value(recorderContextKey{}).(*Recorder)

        r.size += stat.WireLength

    case *stats.End:

        durationMs := stat.EndTime.Sub(stat.BeginTime).Seconds() * 1000.0

        r, _ := ctx.Value(recorderContextKey{}).(*Recorder)

        # use r.size #

    }

}


查看完整回答
反對 回復 2022-12-26
  • 1 回答
  • 0 關注
  • 84 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號