我不建议实现所有的 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