Spring Cloud Zipkin服务端追踪服务

Spring Cloud Zipkin是一个分布式跟踪系统,用于提供跨越多个微服务的请求追踪解决方案。它基于Google Dapper的论文设计实现,通过收集和分析各个服务器之间的交互来提供微服务应用的链路跟踪支持。

以下是实现Spring Cloud Zipkin服务端追踪服务的攻略:

1. 添加依赖

首先,我们需要在Spring Boot应用的pom.xml文件中添加必要的Spring Cloud Zipkin依赖。具体如下:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>

2. 启用Zipkin服务

Zipkin服务可以通过运行zipkin-server Jar(可以从Maven中央仓库中下载)开启。首先,需要从Zipkin官网下载zipkin-server Jar包并运行。下载地址:https://zipkin.io/pages/quickstart.html

可以通过以下命令来启动Zipkin注入类:

@SpringBootApplication
@EnableZipkinServer
public class ZipkinServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(ZipkinServiceApplication.class, args);
    }
}

可以通过访问从命令行输出的特定URL(http://localhost:9411/zipkin/)来访问Zipkin Web UI。

3. 启用二进制传输

默认情况下,Zipkin使用HTTP JSON提交跟踪数据。但是,它同时也支持使用Google Protobuf协议在二进制层面上传输跟踪数据,这样能够减少负载和延迟(HTTP JSON的大小和格式可能会占用更多的带宽和处理时间)。

可以通过添加以下依赖来启用Protobuf:

<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>3.9.1</version>
</dependency>
<dependency>
    <groupId>io.zipkin.reporter2</groupId>
    <artifactId>zipkin-reporter-metrics-micrometer</artifactId>
    <version>2.15.0</version>
</dependency>

然后,可以配置zipkin-sender-url为:

spring.zipkin.sender.type: com.github.kristofa.brave.http.DefaultSpanNameProvider

4. 将Zipkin与Spring Cloud Sleuth集成

Spring Cloud Sleuth提供了基于两个HTTP头信息(X-B3-TraceId和X-B3-SpanId)的追踪实现。此外,它还提供了一组注解,用于标记一些特殊的方法和过程,从而能够在具有繁忙线程的异步设置中进行跟踪。以下是集成Zipkin和Sleuth的详细步骤:

声明依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>

配置服务名称和端口号

spring:
  application:
    name: zipkin-demo
server:
  port: 9999

开启Zipkin和Sleuth的支持

@SpringBootApplication
@EnableZipkinStreamServer
@EnableBinding(Sink.class)
public class ZipkinStreamServer {

    public static void main(String[] args) {
        SpringApplication.run(ZipkinStreamServer.class, args);
    }

    @StreamListener(Sink.INPUT)
    public void log(Span span) {
        System.out.println("TraceId====>"+span.traceIdString()+"||SpanId====>"+span.id());
    }
}

在以上代码中,@EnableZipkinStreamServer是用于启用Zipkin的Stream支持,这样可以使用canary版本的Zipkin。

启用注解

Sleuth提供了一些注解,可以用于跨越多个方法和过程进行Tracing。这些注解被定义在:org.springframework.cloud:spring-cloud-sleuth-core库中。在以下示例中,我们在示例Controller类中添加了@NewSpan注解,以将该请求标记为一个新的Span,然后分别执行两个方法,并在其中一个方法中添加了@ContinueSpan注解。

@RestController
public class TestController {

    @Autowired RestTemplate restTemplate;

    @GetMapping("/hello")
    @NewSpan
    public String hello() {
        return "Hello";
    }

    @GetMapping("/world")
    @ContinueSpan(log = "第二个方法")
    public String world() {
        return restTemplate.getForObject("http://localhost:8080/hello", String.class);
    }
}

需要注意以下问题:
1. 新的Span是在“hello”方法中创建的,并且该Span将在“world”方法中继续(因为@ContinueSpan注解与“world”方法相关联)。
2. 在“world”方法中,我们使用RestTemplate发起了另一个HTTP请求,并从http://localhost:8080/hello服务返回了响应。
3. 另一个Span是从服务中返回的,并将在控制台日志中记录。

以上是关于Spring Cloud Zipkin服务端追踪服务的完整攻略。需要注意的是,还可以将Zipkin与Spring Cloud Config、Eureka等服务一起使用,以实现更好的分布式跟踪能力。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Cloud Zipkin服务端追踪服务 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • 可支持快速搜索筛选的Android自定义选择控件

    下面为你详细讲解“可支持快速搜索筛选的Android自定义选择控件”的完整攻略。 概述 在 Android 开发过程中,我们常常需要用到选择控件,如下拉框、多选框、单选框等。通常情况下,这些控件都不能满足我们的需求,因此我们需要自定义控件来满足我们的需求。其中,可支持快速搜索筛选的自定义选择控件是使用频率较高的一种。本文将详细讲解如何实现这种选择控件。 实现…

    other 2023年6月27日
    00
  • Sublime Text 打开Java文档中文乱码的解决方案

    下面是 “Sublime Text 打开Java文档中文乱码的解决方案”的完整攻略。 问题描述 在使用 Sublime Text 打开 Java 文档时,中文可能会出现乱码,给代码阅读带来不便。 问题原因 Sublime Text 默认编码是 UTF-8,而 Java 文档的编码可能是 GBK 或 GB2312,导致 Sublime Text 打开时不识别中…

    other 2023年6月26日
    00
  • echarts图y周坐标轴文字过长的解决方案

    echarts图y周坐标轴文字过长的解决方案 在使用Echarts绘制图表的过程中,我们常常会遇到Y轴坐标轴标签文字过长,导致显示不全或者重叠的问题。这种情况下应该如何解决呢?本文将分享一些解决方案以供参考。 1. 自动换行 Echarts提供了一种自动换行的方式,可以在标签文字过长时自动进行换行,以保证文字的完整显示。设置方式如下: yAxis: { ty…

    其他 2023年3月28日
    00
  • mysql中workbench实例详解

    MySQL中Workbench实例详解攻略 1. 简介 MySQL Workbench是一款用于管理和操作MySQL数据库的集成开发环境(IDE)。它提供了图形化界面,使用户可以轻松地创建、修改和查询数据库。本攻略将详细介绍如何使用MySQL Workbench创建实例,并提供两个示例说明。 2. 创建实例 步骤1:打开MySQL Workbench 首先,…

    other 2023年7月27日
    00
  • 电脑高手常用技巧应用全接解

    电脑高手常用技巧应用全接解 作为一名电脑高手,掌握一些常用技巧可以帮助我们更加高效地使用电脑。以下是电脑高手常用技巧应用全接解的详细攻略: 一、清理系统垃圾 随着我们在电脑上进行各种操作,系统会产生大量垃圾文件,日积月累会占用相当大的磁盘空间,导致电脑运行变慢。因此,我们需要定期清理系统垃圾。 在Windows系统中,可以通过以下步骤清理系统垃圾: 打开“我…

    other 2023年6月25日
    00
  • Android自定义可编辑、删除的侧滑LisitView

    Android自定义可编辑、删除的侧滑LisitView攻略 在Android开发中,实现可编辑和删除的侧滑ListView是一个常见的需求。下面是一个完整的攻略,包含了实现这一功能所需的步骤和两个示例说明。 步骤一:导入依赖库 首先,你需要在你的项目中导入一个依赖库,这个库可以帮助你实现侧滑功能。一个常用的库是SwipeMenuListView,你可以在你…

    other 2023年8月25日
    00
  • Win7电脑开机速度慢解决方法

    Win7电脑开机速度慢解决方法攻略 如果你的Win7电脑开机速度变慢了,不用担心,下面是一些解决方法,帮助你提高开机速度。 1. 清理启动项 启动项是在系统启动时自动运行的程序或服务。过多的启动项会拖慢开机速度。以下是清理启动项的步骤: 打开任务管理器:按下Ctrl + Shift + Esc组合键,或者右键点击任务栏并选择“任务管理器”。 切换到“启动”选…

    other 2023年8月1日
    00
  • Java 方法引用与ambda表达式的联系

    Java 方法引用和Lambda表达式都是Java 8中引入的新特性,它们都是为了简化代码而生的,它们之间有很大的联系。在Java中,方法引用和Lambda表达式都是为了将方法作为参数传递给其他方法来完成一些功能。 Java Lambda表达式 Lambda表达式是一个匿名函数,它可以传递给其他方法作为参数。Lambda表达式通常用于函数式接口中,这些接口只…

    other 2023年6月26日
    00
合作推广
合作推广
分享本页
返回顶部