本文基于上一篇(二) 做的改动。
对于MQ收集到的链路信息,当Zipkin-Server作为MQ的消费者时,消费出的链路信息默认存储在内存中,当zipkin重启,该部分信息就会丢失,并且存在内存中有内存限制,默认条数好像是5后面忘了几个零。本文对zipkin稍作改造让他存到MySql中把链路信息做持久化。仅涉及到zipkin-server的改动
Zipkin-Server改动
Gradle新增配置:(上一篇的基础上)
//storage.type=mysql 将trace信息存储到mysql
implementation "io.zipkin.java:zipkin-autoconfigure-storage-mysql:${zipkinVersion}"
//end
Application中新增如下代码:
...
//这些参数可以通过命令行传入,此处为了测试直接代码设置
static {
//zipkin-server-shared.yml
System.setProperty("QUERY_PORT", "8080");
System.setProperty("RABBIT_ADDRESSES", "localhost:5672");
System.setProperty("RABBIT_USER", "guest");
System.setProperty("RABBIT_PASSWORD", "guest");
//存储到mysql ZipkinMySQLStorageProperties
//预先创建数据库zipkin
//初始化mysql,通过zipkin-storage-mysql.jar/mysql.sql脚本做初始化
System.setProperty("STORAGE_TYPE", "mysql");
System.setProperty("MYSQL_JDBC_URL", "jdbc:mysql://localhost:3306/zipkin?useUnicode=true&characterEncoding=utf-8&useSSL=false&autoReconnect=true&allowMultiQueries=true");
System.setProperty("MYSQL_USER", "root");
System.setProperty("MYSQL_PASS", "root");
}
...
重启消费到的链路信息会存储到MySQL,后续重启数据将不会丢失。
此外持久化方式还支持ElasticSearch,Cassandra,Cassandra3,把autoconfigure依赖替换为要使用的存储即可。