我正在我的(異步)JVM 應用程序中實施 opencensus 跟踪。
但是我不明白上下文是如何傳遞的。有時它似乎工作正常,有時來自不同請求的痕跡無緣無故地嵌套。
我也有這個警告和堆棧跟踪一起出現在日誌中: SEVERE: Context was not attached when detaching
如何顯式創建根跨度,以及如何將父/上下文顯式傳遞給子跨度?
在 OpenCensus 中,我們有一個獨立於“跨度”或“標籤”的上下文概念。它代表一個隨請求傳播的 Map(它作為線程本地實現,因此同步調用會自動傳播)。對於僅用於傳播的回調/異步調用(我們使用 io.grpc.Context 作為上下文的實現),請使用此處定義的包裝函數https://github.com/grpc/grpc-java/blob/master/context/ src/main/java/io/grpc/Context.java#L589。這將確保僅上下文傳播,因此上下文映射中的條目將在不同線程之間傳播。
如果要在一個線程中啟動 Span 並在另一個線程中結束它,請使用withSpan
跟踪器https://www.javadoc.io/doc/io.opencensus/opencensus-api/0.17.0 中的方法:
class MyClass {
private static Tracer tracer = Tracing.getTracer();
void handleRequest(Executor executor) {
Span span = tracer.spanBuilder("MyRunnableSpan").startSpan();
// do some work before scheduling the async
executor.execute(Context.wrap(tracer.withSpan(span, new Runnable() {
@Override
public void run() {
try {
sendResult();
} finally {
span.end();
}
}
})));
}
}
這裡有更多關於這個的信息https://github.com/census-instrumentation/opencensus-specs/blob/master/trace/Span.md#span-creation
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句