Sleuth 1.3 > 2.0 互操作性
Sleuth 1.3 > 2.0 Interoperability
我有一个通过 AWS 服务发送消息的应用程序,我通过
手动将 headers 添加到消息中
final Map<String, Object> braveHeaders = new HashMap<>();
braveHeaders.put(Span.TRACE_ID_NAME, span.getTraceId());
braveHeaders.put(Span.PARENT_ID_NAME, span.getParents().stream().findFirst().orElse(0L));
braveHeaders.put(Span.SAMPLED_NAME, span.isExportable());
braveHeaders.put(Span.SPAN_FLAGS, span.getBaggage());
braveHeaders.put(Span.SPAN_NAME_NAME, span.getName());
braveHeaders.put(Span.SPAN_EXPORT_NAME, span.getName());
braveHeaders.put(Span.SPAN_ID_NAME, span.getSpanId());
在消费者应用程序上,我正在尝试读取属性并构建一个新 Span,
JsonNode braveTree = objectMapper.readTree(brave.asText());
// configure a function that extracts the trace context from a request
TraceContext.Extractor<JsonNode> extractor = tracing.propagation().extractor(
(carrier, key) -> carrier.get(key).asText());
// when a server receives a request, it joins or starts a new trace
Span span = tracing.tracer().nextSpan(extractor.extract(braveTree));
已成功从 Headers 中提取 headers,但在解析 parseSpanId
时会失败,因为长度无效,导致新 TraceContext 的创建失败。
/** Parses the span id from the input string. Returns true if the ID is valid. */
final <C, K> boolean parseSpanId(Propagation.Getter<C, K> getter, C carrier, K key) {
String spanIdString = getter.get(carrier, key);
if (isNull(key, spanIdString)) return false;
int length = spanIdString.length();
if (invalidIdLength(key, length, 16)) return false;
spanId = lenientLowerHexToUnsignedLong(spanIdString, 0, length);
if (spanId == 0) {
maybeLogNotLowerHex(key, spanIdString);
return false;
}
return true;
}
从 Sleuth 1.3 > 2.0 接收 headers 时,有什么方法可以继续跨度吗?还是所有应用程序都必须是同一版本?
这实际上是 headers 发送方式的问题。 headers 没有调用 Span.idToHex(...)
,因此检查失败。
我有一个通过 AWS 服务发送消息的应用程序,我通过
手动将 headers 添加到消息中 final Map<String, Object> braveHeaders = new HashMap<>();
braveHeaders.put(Span.TRACE_ID_NAME, span.getTraceId());
braveHeaders.put(Span.PARENT_ID_NAME, span.getParents().stream().findFirst().orElse(0L));
braveHeaders.put(Span.SAMPLED_NAME, span.isExportable());
braveHeaders.put(Span.SPAN_FLAGS, span.getBaggage());
braveHeaders.put(Span.SPAN_NAME_NAME, span.getName());
braveHeaders.put(Span.SPAN_EXPORT_NAME, span.getName());
braveHeaders.put(Span.SPAN_ID_NAME, span.getSpanId());
在消费者应用程序上,我正在尝试读取属性并构建一个新 Span,
JsonNode braveTree = objectMapper.readTree(brave.asText());
// configure a function that extracts the trace context from a request
TraceContext.Extractor<JsonNode> extractor = tracing.propagation().extractor(
(carrier, key) -> carrier.get(key).asText());
// when a server receives a request, it joins or starts a new trace
Span span = tracing.tracer().nextSpan(extractor.extract(braveTree));
已成功从 Headers 中提取 headers,但在解析 parseSpanId
时会失败,因为长度无效,导致新 TraceContext 的创建失败。
/** Parses the span id from the input string. Returns true if the ID is valid. */
final <C, K> boolean parseSpanId(Propagation.Getter<C, K> getter, C carrier, K key) {
String spanIdString = getter.get(carrier, key);
if (isNull(key, spanIdString)) return false;
int length = spanIdString.length();
if (invalidIdLength(key, length, 16)) return false;
spanId = lenientLowerHexToUnsignedLong(spanIdString, 0, length);
if (spanId == 0) {
maybeLogNotLowerHex(key, spanIdString);
return false;
}
return true;
}
从 Sleuth 1.3 > 2.0 接收 headers 时,有什么方法可以继续跨度吗?还是所有应用程序都必须是同一版本?
这实际上是 headers 发送方式的问题。 headers 没有调用 Span.idToHex(...)
,因此检查失败。