0

我正在尝试创建一个示踪剂,然后是示踪剂的一个跨度。执行工作。然后关闭跨度。我希望关闭操作将调用 spanReporter.report,它应该将数据发布到可用的 Zipkin 服务器(默认本地主机)

然而,这并没有发生。代码如下。我注意到我正在使用 NeverSampler。将其更改为 AlwaysSampler(目前)。我还使用 NoOpSpanReporter 作为默认的 SpanReporter(什么都不做)。我想将其更改为 ZipkinSpanReporter。(或者是其他东西)。这就是我卡住的地方。

问题:

  1. 根据粘贴的代码,我应该使用什么类型的默认跨度报告?
  2. 哪个 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

注意:
这个特定项目在其任何服务中都没有任何 http 调用。它是一个数据处理项目。
@SpringBootApplication 尚未使用。(尽管所有 zipkin 示例都使用它)。有必要吗?

4

1 回答 1

0

似乎侦探跨度与 Zipkin 跨度不同。因此,在上面的代码中,无法使用 zipkin span 报告器实例化默认跟踪器。我将 sleuth span 转换为 zipkin span,然后将其报告给 zipkin。转换它的类在 spring-cloud-sleuth-stream 中可用。我使用了几乎相同的类并进行了一些调整。

于 2017-05-26T04:52:41.587 回答