一、前言
在上一篇文章中: Spring Cloud系列教程(十三):服务追踪Spring Cloud Sleuth+Zipkin(Finchley版本) , 我们初步学习了关于SpringCloud Sleuth
和Zipkin
的一些基础概念以及简要原理,并且通过实战搭建了SpringCloud Sleuth
和Zipkin
服务链路追踪数据的传输、收集以及UI
界面的查询和相关数据展示,前面也简单提到过Zipkin
默认是将数据存放到内存当中的,这种默认方式并不适用于我们的生产环境,一来是比较浪费内存,二来是一旦Zipkin-Server
服务重启,数据将全部丢失,本篇博客就实现将数据持久化到Mysql
中。
二、zipkin数据存放方式
官方文档中介绍到Zipkin
可以将数据保存到Cassandra
、Elasticsearch
、MySQL
。国内关于Cassandra
的资料较少,这里就暂且不采纳Cassandra
。
三、如何持久化到MySQL
在SpringBoot2.0
之前的版本,Zipkin-Server
端由我们自己创建项目来搭建。可以比较灵活的选择数据持久化的配置,SpringBoot2.0
之后的版本,Zipkin-Server
端由官方提供,无需我们自己搭建,那么如何选择去配置将数据持久化到MySQL
呢? 这是一个值得思考的问题:
1. 官方提供MySQL
初始化脚本
查阅Zipkin
的GitHub
源码,发现其提供了Cassandra
、Elasticsearch
、MySQL
的初始化脚本,查看MySQL
的初始化脚本,发现提供了3张表的初始化SQL。
SQL语句参见: https://github.com/openzipkin/zipkin/blob/master/zipkin-storage/mysql-v1/src/main/resources/mysql.sql
2. 创建zipkin数据库
(1)、找到我们之前下载的zipkin-server
端jar
包,zipkin-server-2.12.9-exec.jar ,打开zipkin-server-shared.yml
文件
(2)、打开这个文件,发现zipkin-server-2.12.9-exec.jar提供了Cassandra
、Elasticsearch
、MySQL
的持久化配置,只需要填写对应的配置参数即可,而且数据库名称默认是取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)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。