我试图创建一个跟踪器,然后从跟踪器创建一个范围 . 表演工作 . 然后关闭 Span . 我希望close操作会调用spanReporter.report,它应该将数据发布到可用的Zipkin服务器(默认localhost)
但是,这种情况并没有发生 . 代码如下 . 我注意到我正在使用NeverSampler . 将其更改为AlwaysSampler(暂时) . 我也使用NoOpSpanReporter作为默认的SpanReporter(它什么都不做) . 我想将其更改为ZipkinSpanReporter . (或者是其他东西) . 这是我被困的地方 .
问题:
-
根据粘贴的代码,我应该使用哪种正确类型的默认范围报告?
-
哪个jar将具有正确的Span Reporter . 我在spring-cloud-sleuth-zipkin中看到了ZipkingSpanReporter类 . 那么,我应该删除spring-cloud-sleuth- *依赖项并将其替换为zipkin依赖项吗?
public class TestClass {
private TestClass() {
// Default constructor
}
public static DefaultTracer createDefaultTracer() {
boolean isTraceId128 = false;
Sampler sampler = createDefaultTraceSampler();
Random random = createDefaultRandomForSpanIds();
SpanNamer spanNamer = createDefaultSpanNamer();
SpanLogger spanLogger = createDefaultSpanLogger();
SpanReporter spanReporter = createDefaultSpanReporter();
TraceKeys traceKeys = new TraceKeys();
return new DefaultTracer(sampler, random, spanNamer, spanLogger, spanReporter, isTraceId128, traceKeys);
}
public static Random createDefaultRandomForSpanIds() {
return new Random();
}
public static Sampler createDefaultTraceSampler() {
//return NeverSampler.INSTANCE;
return new AlwaysSampler();
}
public static SpanNamer createDefaultSpanNamer() {
return new DefaultSpanNamer();
}
public static SpanReporter createDefaultSpanReporter() {
return new NoOpSpanReporter(); //What default span reporter should I use
}
public static SpanLogger createDefaultSpanLogger() {
return new NoOpSpanLogger(); //I do not care about logging spans using slf4j for now
}
}
现在使用上面的代码片段:
DefaultTracer tracer = TestClass.createDefaultTracer();
Span mySpan=tracer.createSpan("testSpan");
//Do work
tracer.close(mySpan);//This should stop the span and report the span to zipkin for display
Note:
此特定项目在其任何服务中都没有任何http调用 . 它是一个数据处理项目 .
@SpringBootApplication尚未使用 . (所有zipkin示例都使用它) . 有必要吗?
1 回答
看起来 Sleuth Span 与Zipkin Span 不同 . 因此,在上面的代码中,无法使用zipkin span报告器实例化默认跟踪器 . 我将 Sleuth 范围转换为拉链 Span ,然后将其报告为拉链 . 转换它的类在spring-cloud-sleuth-stream中可用 . 我使用了几乎相同的类进行了一些调整 .