日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)GoFrame教程:GoFrameHTTP示例-Baggage

baggage鏈路數(shù)據(jù)傳遞

示例代碼地址:https://github.com/GOgf/gf/tree/master/example/trace/http

創(chuàng)新互聯(lián)公司致力于成都做網(wǎng)站、成都網(wǎng)站制作,成都網(wǎng)站設(shè)計,集團網(wǎng)站建設(shè)等服務(wù)標(biāo)準(zhǔn)化,推過標(biāo)準(zhǔn)化降低中小企業(yè)的建站的成本,并持續(xù)提升建站的定制化服務(wù)水平進行質(zhì)量交付,讓企業(yè)網(wǎng)站從市場競爭中脫穎而出。 選擇創(chuàng)新互聯(lián)公司,就選擇了安全、穩(wěn)定、美觀的網(wǎng)站建設(shè)服務(wù)!

客戶端

package main

import (
	"github.com/gogf/gf/contrib/trace/jaeger/v2"
	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/net/gtrace"
	"github.com/gogf/gf/v2/os/gctx"
)

const (
	ServiceName       = "http-client"
	JaegerUdpEndpoint = "localhost:6831"
)

func main() {
	var ctx = gctx.New()
	tp, err := jaeger.Init(ServiceName, JaegerUdpEndpoint)
	if err != nil {
		g.Log().Fatal(ctx, err)
	}
	defer tp.Shutdown(ctx)

	StartRequests()
}

func StartRequests() {
	ctx, span := gtrace.NewSpan(gctx.New(), "StartRequests")
	defer span.End()

	ctx = gtrace.SetBaggageValue(ctx, "name", "john")

	content := g.Client().GetContent(ctx, "http://127.0.0.1:8199/hello")
	g.Log().Print(ctx, content)
}

客戶端代碼簡要說明:

  1. 首先,客戶端也是需要通過?jaeger.Init?方法初始化?Jaeger?。
  2. 隨后,這里通過?gtrace.SetBaggageValue(ctx, "name", "john")?方法設(shè)置了一個?baggage?,該?baggage?將會在該請求的所有鏈路中傳遞。不過我們該示例也有兩個節(jié)點,因此該?baggage?數(shù)據(jù)只會傳遞到服務(wù)端。該方法會返回一個新的?context.Context?上下文變量,在隨后的調(diào)用鏈中我們將需要傳遞這個新的上下文變量。
  3. 其中,這里通過?g.Client()?創(chuàng)建一個?HTTP?客戶端請求對象,該客戶端會自動啟用鏈路跟蹤特性,無需開發(fā)者顯示調(diào)用任何方法或者任何設(shè)置。
  4. 最后,這里使用了?g.Log().Print(ctx, content)?方法打印服務(wù)端的返回內(nèi)容,其中的?ctx?便是將鏈路信息傳遞給日志組件,如果?ctx?上下文對象中存在鏈路信息時,日志組件會同時自動將?TraceId?輸出到日志內(nèi)容中。

服務(wù)端

package main

import (
	"github.com/gogf/gf/contrib/trace/jaeger/v2"
	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/net/ghttp"
	"github.com/gogf/gf/v2/net/gtrace"
	"github.com/gogf/gf/v2/os/gctx"
)

const (
	ServiceName       = "http-server"
	JaegerUdpEndpoint = "localhost:6831"
)

func main() {
	var ctx = gctx.New()
	tp, err := jaeger.Init(ServiceName, JaegerUdpEndpoint)
	if err != nil {
		g.Log().Fatal(ctx, err)
	}
	defer tp.Shutdown(ctx)

	s := g.Server()
	s.Group("/", func(group *ghttp.RouterGroup) {
		group.GET("/hello", HelloHandler)
	})
	s.SetPort(8199)
	s.Run()
}

func HelloHandler(r *ghttp.Request) {
	ctx, span := gtrace.NewSpan(r.Context(), "HelloHandler")
	defer span.End()

	value := gtrace.GetBaggageVar(ctx, "name").String()

	r.Response.Write("hello:", value)
}

服務(wù)端代碼簡要說明:

  1. 當(dāng)然,服務(wù)端也是需要通過?jaeger.Init?方法初始化?Jaeger?。
  2. 服務(wù)端啟動啟用鏈路跟蹤特性,開發(fā)者無需顯示調(diào)用任何方法或任何設(shè)置。
  3. 服務(wù)端通過?gtrace.GetBaggageVar(ctx, "name").String()?方法獲取客戶端提交的?baggage?信息,并轉(zhuǎn)換為字符串返回。

效果查看

啟動服務(wù)端:

啟動客戶端:

可以看到,客戶端提交的?baggage?已經(jīng)被服務(wù)端成功接收到并打印返回。并且客戶端在輸出日志內(nèi)容的時候也同時輸出的?TraceId?信息。?TraceId?是一條鏈路的唯一?ID?,可以通過該?ID?檢索該鏈路的所有日志信息,并且也可以通過該?TraceId?在?Jaeger?系統(tǒng)上查詢該調(diào)用鏈路詳情。

在?Jaeger?上查看鏈路信息:

可以看到在這里出現(xiàn)了兩個服務(wù)名稱:?tracing-http-client?和?tracing-http-server?,表示我們這次請求涉及到兩個服務(wù),分別是?HTTP?請求的客戶端和服務(wù)端,并且每個服務(wù)中分別涉及到2個?span?鏈路節(jié)點。

我們點擊這個?trace?的詳情,可以看得到調(diào)用鏈的層級關(guān)系。并且可以看得到客戶端請求的地址、服務(wù)端接收的路由以及服務(wù)端路由函數(shù)名稱。我們這里來介紹一下客戶端的?Atttributes?信息和?Events?信息,也就是?Jaeger?中展示的?Tags?信息和?Process?信息。

HTTP Client Attributes

Attribute/Tag 說明
otel.instrumentation_library.name 當(dāng)前儀表器名稱,往往是當(dāng)前span操作的組件名稱
otel.instrumentation_library.version 當(dāng)前儀表器組件版本
span.kind

當(dāng)前span的類型,一般由組件自動寫入。常見span類型為:

類型 說明

client 

客戶端
server 服務(wù)端
producer 生產(chǎn)者,常用于MQ
consumer 消費者,常用于MQ
internal 內(nèi)部方法,一般業(yè)務(wù)使用
undefined 未定義,較少使用
status.code 當(dāng)前span狀態(tài),0為正常,非0表示失敗
status.message 當(dāng)前span狀態(tài)信息,往往在失敗時會帶有錯誤信息
hostname 當(dāng)前節(jié)點的主機名稱
ip.intranet 當(dāng)前節(jié)點的主機內(nèi)網(wǎng)地址列表
http.address.local HTTP通信的本地地址和端口
http.address.remote HTTP通信的目標(biāo)地址和端口
http.dns.start 當(dāng)請求的目標(biāo)地址帶有域名時,開始解析的域名地址
http.dns.done 當(dāng)請求的目標(biāo)地址帶有域名時,解析結(jié)束之后的IP地址
http.connect.start 開始創(chuàng)建連接的類型和地址
http.connect.done 創(chuàng)建連接成功后的類型和地址

HTTP Client Events

Event/Log 說明
http.request.headers HTTP客戶端請求提交的Header信息,可能會比較大。
http.request.baggage HTTP客戶端請求提交的Baggage信息,用于服務(wù)間鏈路信息傳遞。
http.request.body

HTTP客戶端請求提交的Body數(shù)據(jù),可能會比較大,最大只記錄512KB,如果超過該大小則忽略。

http.response.headers HTTP客戶端請求接收返回的的Header信息,可能會比較大。
http.response.body HTTP客戶端請求接收返回的Body數(shù)據(jù),可能會比較大,最大只記錄512KB,如果超過該大小則忽略。

HTTP Server Attributes

?HTTP Server?端的?Attributes?含義同?HTTP Client?,在同一請求中,打印的數(shù)據(jù)基本一致。

HTTP Server Events

?HTTP Server?端的?Events?含義同?HTTP Client?,在同一請求中,打印的數(shù)據(jù)基本一致。


網(wǎng)站欄目:創(chuàng)新互聯(lián)GoFrame教程:GoFrameHTTP示例-Baggage
標(biāo)題URL:http://www.5511xx.com/article/cohgcoh.html