【问题标题】:What is the difference between Go Context Value and OpenTracing Baggage Items?Go Context Value 和 OpenTracing Baggage Items 有什么区别?
【发布时间】:2021-09-01 01:50:32
【问题描述】:

我想了解 Go 中的 Context 和 OpenTracing 中的 Baggage Items 之间的区别。具体来说,他们携带数据的区别。

据我所知,两者都可以将键值对传递给它们的后代(子上下文/子跨度)。

在 Go 的标准库中,我可以使用:

func context.WithValue(parent Context, key, val interface{}) Context

在 OpenTracing 中,我可以使用:

func SetBaggageItem(restrictedKey, value string) Span

显然,存在一些类型限制(接口{} 和字符串)。还有什么我应该知道的吗?

什么情况下应该选择携带一些键值对?

【问题讨论】:

  • context.Context的主要用途是取消。
  • @Volker 是的,我明白了。所以我不应该使用 context.Context 来传递值?

标签: go jaeger opentracing


【解决方案1】:

这两者都有不同的用例。

GoContext 用于定义 Context 类型,它携带截止日期、取消信号和其他跨 API 边界的请求范围值。

在 Go 服务器中,每个传入的请求都在其自己的 goroutine 中处理。 请求处理程序通常会启动额外的 goroutine 来访问后端 例如数据库和 RPC 服务。一组 goroutines 工作在一个 请求通常需要访问特定于请求的值,例如 最终用户的身份、授权令牌和请求的 截止日期

然而,OpenTracing 框架用于分布式跟踪。我们使用分布式跟踪来分析监控应用程序。包袱是元数据捎带支持跨服务的请求

SERVICE A -> SERVICE B -> SERVICE C

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-16
    • 1970-01-01
    • 2015-02-16
    • 2016-11-22
    • 1970-01-01
    • 2016-02-27
    相关资源
    最近更新 更多