gpt4 book ai didi

go - 如何使用 json 传递 opentracing 数据

转载 作者:行者123 更新时间:2023-12-01 22:17:26 25 4
gpt4 key购买 nike

我的 API 网关启动了一个跟踪器和一个用于验证电子邮件的跨度。然后它传递给 user-service进行验证。

我想通过 span详情至user-service作为 json 对象并开始另一个 span作为一个
tracer.start_span('Validate Email', child_of=API_gateway_span)
为此,我使用了以下结构:

type checkEmail struct {
GatewayTracerSpan opentracing.SpanContext `json: gatewayTracerSpan`
Email string `json: email`
Uuid string `json: uuid`
}

function()
validateEmailSpan := apitracer.tracer.StartSpan("Validate Email")

emailJson := checkEmail{
GatewayTracerSpan: validateEmailSpan.Context(),
Email: email,
Uuid: uuid,
}

但总是 GatewayTracerSpan是空值。
我刚刚开始分布式跟踪。这里我选择使用 json 而不是原生 http-headers因为它易于升级任何协议(protocol)更改。

这可能吗?如果是这样,我做得对吗?或者我犯了什么错误?

最佳答案

链接来自不同服务的 span 的一种方法是使用 uber-trace-id从父跨度。如果您有 LogSpans设置为 true在您的 ReporterConfig , uber-trace-id是打印出来的 ("Reporting span xxx-xxx-xxx")。

以下是它在代码中的样子:

//API Gateway
carrier := opentracing.TextMapCarrier{} //you can use any type of carrier or even create your own
ctx, _ := opentracing.GlobalTracer().Extract(opentracing.TextMap, carrier)
span := apitracer.tracer.StartSpan(name, ext.RPCServerOption(ctx))
_ := span.Tracer().Inject(span.Context(), opentracing.TextMap, carrier)
uberTraceID := carrier["uber-trace-id"]

您现在可以通过 uberTraceID而不是 validateEmailSpan.Context()到您的其他服务。

您可以在其他服务中使用此功能:
//Email service
func NewChildSpanThatFollows(name, uberTraceID string) opentracing.Span {
carrier := opentracing.TextMapCarrier{}
carrier.Set("uber-trace-id", uberTraceID)
ctx, _ := opentracing.GlobalTracer().Extract(opentracing.TextMap, carrier)
span := opentracing.StartSpan(name, opentracing.FollowsFrom(ctx))
_ := span.Tracer().Inject(span.Context(), opentracing.TextMap, carrier)

return span
}

如果我需要查看以父子方式链接在一起的服务之间的跨度,这对我有用。如果还需要传递其他信息,我建议将其作为 JSON 对象中的常规数据传递,然后创建我自己的 Carrier或在需要时使用标签对传递的数据进行搜索。
span.SetTag("request_id", requestID)

编辑:

Here您可以找到有关使用 opentracing 的精彩教程。它使用 HTTPHeadersCarrier ,它有一步一步的演练,但它与上面的过程基本相同。

关于go - 如何使用 json 传递 opentracing 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58740621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com