我正在尝试创建一个跟踪器,然后是跟踪器的跨度。 表演工作。 然后关闭跨度。 我希望close操作会调用spanReporter.report,它应该将数据发布到可用的Zipkin服务器(默认localhost)
但是,这种情况并没有发生。 代码如下。 我注意到我正在使用NeverSampler。将其更改为AlwaysSampler(暂时)。 我也使用NoOpSpanReporter作为默认的SpanReporter(它什么都不做)。我想将其更改为ZipkinSpanReporter。 (或者是其他东西)。 这就是我被困住的地方。
问题:
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
注意:
此特定项目在其任何服务中都没有任何http调用。它是一个数据处理项目
@SpringBootApplication尚未使用。 (所有的zipkin例子都使用它)。有必要吗?
答案 0 :(得分:0)
似乎侦探跨度与Zipkin跨度不同。 因此,在上面的代码中,没有办法用zipkin span报告器实例化默认跟踪器。 我将侦探范围转换为拉链跨度,然后将其报告为zipkin。转换它的类在spring-cloud-sleuth-stream中可用。我使用了几乎相同的类进行了一些调整。