Spring Cloud系列教程(十四):服务追踪SpringCloud Sleuth集成Zipkin持久化数据存储Mysql(Finchley版本)

一、前言

在上一篇文章中: Spring Cloud系列教程(十三):服务追踪Spring Cloud Sleuth+Zipkin(Finchley版本) , 我们初步学习了关于SpringCloud SleuthZipkin的一些基础概念以及简要原理,并且通过实战搭建了SpringCloud SleuthZipkin服务链路追踪数据的传输、收集以及UI界面的查询和相关数据展示,前面也简单提到过Zipkin默认是将数据存放到内存当中的,这种默认方式并不适用于我们的生产环境,一来是比较浪费内存,二来是一旦Zipkin-Server服务重启,数据将全部丢失,本篇博客就实现将数据持久化到Mysql中。

二、zipkin数据存放方式

官方文档中介绍到Zipkin可以将数据保存到CassandraElasticsearchMySQL。国内关于Cassandra的资料较少,这里就暂且不采纳Cassandra

三、如何持久化到MySQL

SpringBoot2.0之前的版本,Zipkin-Server端由我们自己创建项目来搭建。可以比较灵活的选择数据持久化的配置,SpringBoot2.0之后的版本,Zipkin-Server端由官方提供,无需我们自己搭建,那么如何选择去配置将数据持久化到MySQL呢? 这是一个值得思考的问题:

1. 官方提供MySQL初始化脚本

查阅ZipkinGitHub源码,发现其提供了CassandraElasticsearchMySQL的初始化脚本,查看MySQL的初始化脚本,发现提供了3张表的初始化SQL。
在这里插入图片描述
SQL语句参见: https://github.com/openzipkin/zipkin/blob/master/zipkin-storage/mysql-v1/src/main/resources/mysql.sql

2. 创建zipkin数据库

(1)、找到我们之前下载的zipkin-serverjar包,zipkin-server-2.12.9-exec.jar ,打开zipkin-server-shared.yml文件
在这里插入图片描述
(2)、打开这个文件,发现zipkin-server-2.12.9-exec.jar提供了CassandraElasticsearchMySQL的持久化配置,只需要填写对应的配置参数即可,而且数据库名称默认是取zipkin,这也就是为什么我标题之直接叫创建zipkin数据库的原因,那么问题来了,我们修改了这个配置文件,将对应的配置参数配置上我们的Mysql地址相关信息,那么这是一个SpringBoot程序的jar包,好像行不通吧,于是,尝试了先将jar包解压开来,在修改完配置后,重新压缩一下,然后将后缀名改为jar,貌似不行哦,那么我们采用SpringBoot提供的命令行形式,请看下面第三点。
在这里插入图片描述
(3)、创建数据库如下
在这里插入图片描述

3. 命令行启动设置Mysql

在启动zipkin时,命令行输入mysql的参数,官方提供命令模板如下:

java -jar zipkin-server-2.12.9-exec.jar 
--zipkin.collector.rabbitmq.addresses=localhost 
--zipkin.collector.rabbitmq.username=xxx 
--zipkin.collector.rabbitmq.password=xxx 
--STORAGE_TYPE=mysql 
--MYSQL_HOST=127.0.0.1 
--MYSQL_TCP_PORT=3306 
--MYSQL_DB=zipkin 
--MYSQL_USER=root 
--MYSQL_PASS=root 

我项目执行的完整命令如下: 可以把这些命令做成一个批处理文件,每次启动时双击就OK了,很方便

java -jar E:\Path\Soft\zipKin\zipkin-server-2.12.9-exec.jar --STORAGE_TYPE=mysql --MYSQL_HOST=127.0.0.1 --MYSQL_TCP_PORT=3306 --MYSQL_DB=zipkin --MYSQL_USER=root --MYSQL_PASS=123456

在这里插入图片描述

4. 访问http://127.0.0.1:9411/zipkin

此时是没有数据的
在这里插入图片描述

四、测试

方案: 按照顺序依次启动以下服务,然后调用接口请求一次服务,查看zipkin-server的UI界面,发现有一条追踪的数据后,我们停掉zipkin-server,然后再以上面的方式启动(命令行设置Mysql),如果启动后能查询到我们刚才请求的哪一条服务追踪数据,说明OK了同时也可以查看数据表,会发现多了几条数据。
①. eureka-server: 服务注册中心,端口8000;
②. app-pay: 支付服务工程,端口8763;
③. app-member: 会员服务工程,端口8765;
④. app-order: 订单服务工程,端口8761;

步骤1. 访问注册中心:http://127.0.0.1:8000/
在这里插入图片描述
步骤2. 访问订单服务: http://127.0.0.1:8761/getOrderToMemberToMsg
在这里插入图片描述
步骤3. 查看zipkin-server的UI界面
在这里插入图片描述
步骤4. 重启zipkin-server,然后再次查看UI界面,发现依然能够查询到上一次请求的服务链路追踪数据

步骤5. 查看数据库表,发现数据都存储进去了,这就已经可以百分之百证明zipkin-server重启之后读的数据是从Mysql表里面读的。
在这里插入图片描述
在这里插入图片描述
至此,SpringCloud Sleuth集成Zipkin持久化数据存储Mysql已经实战完成了。

五、源码

源码: https://github.com/Thinkingcao/SpringCloudLearning/tree/master/springcloud-sleuth-zipkin

六、SpringCloud系列教程

下一篇: Spring Cloud系列教程(十五):服务追踪SpringCloud Sleuth集成Zipkin持久化到Elasticsearch(Finchley版本)

SpringCloud教程汇总: Spring Cloud系列教程(汇总篇):专栏汇总篇(持续更新中)

在这里插入图片描述

Thinkingcao CSDN认证博客专家 Java Spring Boot 架构
CSDN2019年度博客之星、博客专家,专注架构、Java、SpringBoot、SpringCloud、Spring、微服务、分布式等领域
©️2020 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值