0

我的公司有定制的分布式跟踪解决方案。我已经为它准备好了 Java 客户端/代理库,它能够将跟踪/跨度发送到服务器。

但是我想将它与 Spring Boot Sleuth / Brave 集成,以便从 Brave 实现某种桥接,所以勇敢会使用我的客户端/代理库来发送跟踪/跨度。

如何在 Brave 中仅自定义发件人部分?

另一种方法是从头开始实现所有 Sleuth api 接口(Tracer、Span、TraceContext 等),这是一项艰巨的任务。

我想使用 Brave 实现,只是注入某种将使用我的自定义客户端/代理的桥接器/适配器。

4

1 回答 1

1

我不建议实现所有的 Sleuth 接口,在这种情况下,您正在编写 Tracing 库(您正在重写 Brave)。

您可以实现该zipkin2.reporter.Sender接口并从中创建一个@Bean,这是一个示例:

public class SoutSender extends Sender {
    @Override
    public Encoding encoding() {
        return JSON;
    }

    @Override
    public int messageMaxBytes() {
        return 500 * 1024; //500 KiB
    }

    @Override
    public int messageSizeInBytes(List<byte[]> encodedSpans) {
        return encodedSpans.stream()
                .mapToInt(encodedSpan -> encodedSpan.length)
                .sum();
    }

    @Override
    public Call<Void> sendSpans(List<byte[]> encodedSpans) {
        encodedSpans.stream()
                .map(String::new)
                .forEach(System.out::println);

        return Call.create(null);
    }
}

您也需要创建一个Reporter<zipkin2.Span>bean,但为此,您不需要实现任何东西:

@Bean
Reporter<Span> soutReporter(SoutSender soutSender) {
    return AsyncReporter.create(soutSender);
}

@Bean
Sender soutSender(SoutSender sender) {
    return new SoutSender();
}

这将注册一个额外的报告器,如果您只想保留自己的报告并且不想向 zipkin 和您自己的系统报告,您需要相应地命名 bean,请参阅文档:https://docs.spring。 io/spring-cloud-sleuth/docs/current/reference/html/project-features.html#overriding-the-auto-configuration-of-zipkin

于 2021-12-14T20:58:13.483 回答