SpringCloud 传播Span上下文
2023-12-01 15:49 更新
跨度上下文是必须跨进程边界传播到任何子项spans的状态。Span上下文的一部分是行李。跟踪和跨度ID是跨度上下文的必需部分。行李是可选部件。
行李是存储在span上下文中的一组key:value对。行李与踪迹一起旅行,并附着在每个跨度上。Spring Cloud Sleuth理解,如果HTTP标头以baggage-
为前缀,则标头与行李有关,对于消息传递,标头以baggage_
开头。
当前对行李物品的数量或大小没有限制。但是,请记住,太多会降低系统吞吐量或增加RPC延迟。在极端情况下,由于超出传输级消息或标头容量,过多的行李可能会使应用程序崩溃。
以下示例显示跨度设置行李:
Span initialSpan = this.tracer.nextSpan().name("span").start(); ExtraFieldPropagation.set(initialSpan.context(), "foo", "bar"); ExtraFieldPropagation.set(initialSpan.context(), "UPPER_CASE", "someValue");
行李随身携带(每个孩子跨度都包含其父母的行李)。Zipkin不了解行李并且不接收该信息。
从Sleuth 2.0.0开始,您必须在项目配置中显式传递行李密钥名称。在此处阅读有关该设置的更多信息
标签被附加到特定范围。换句话说,它们仅针对该特定跨度显示。但是,您可以按标签搜索以找到轨迹,前提是存在一个具有所搜索标签值的跨度。
如果您希望能够基于行李查找跨度,则应在根跨度中添加相应的条目作为标签。
范围必须在范围内。
以下清单显示了使用行李的集成测试:
设置。
spring.sleuth: baggage-keys: - baz - bizarrecase propagation-keys: - foo - upper_case
编码。
initialSpan.tag("foo", ExtraFieldPropagation.get(initialSpan.context(), "foo")); initialSpan.tag("UPPER_CASE", ExtraFieldPropagation.get(initialSpan.context(), "UPPER_CASE"));
以上内容是否对您有帮助:
更多建议: