上一篇 搭建zipkin的方式实现分布式链路跟踪,但没有将请求服务的链路信息存储到数据库,以下通过RabbitMQ实现Zipkin持久化到Mysql8。使用zipkin 2版本提供了 jar包启动应用。
- Java 8及以上版本
- Spring Cloud Hoxton.SR8
- RabbitMQ 3.8.9 Erlang 23.1.1
- zipkin-server-2.22.2
- Mysql8
一、搭建Zipkin Server
mac中安装 RabbitMQ
1. 安装Erlang,执行brew install erlang命令。
2. 安装RabbitMQ Server,执行 brew install rabbitmq命令。
进入目录/usr/local/sbin,执行rabbitmq-server,访问RabbitMQ http://localhost:15672 #guest guest
创建一个名为 zipkin 的数据库,从Github下载 zipkin 的sql语句,导入数据库。
下载zipkin-server包,执行如下指令启动zipkin应用。
java -jar zipkin-server-2.22.2-exec.jar --MYSQL_HOST=127.0.0.1 --MYSQL_TCP_PORT=3306 --MYSQL_USER=root --MYSQL_PASS=123456 --MYSQL_DB=zipkin --STORAGE_TYPE=mysql --zipkin.collector.rabbitmq.addresses=127.0.0.1:5672 --zipkin.collector.rabbitmq.username=test --zipkin.collector.rabbitmq.password=123456
看到如下界面,说明zipkin应用启动成功。
访问RabbitMQ,可以看到Queues标签页出现了kipzin记录,请求服务的链路信息将发送到该队列。
二、搭建各个服务
- eureka-service 服务注册中心
- hello-service 请求服务
- ribbon-consumer 服务消费
通过RabbitMQ实现Zipkin持久化到Mysql8。
ribbon-consumer服务 application.yml 配置如下:
server:
port: 9000
spring:
application:
name: ribbon-consumer
zipkin:
base-url: http://localhost:9411/
sender:
type: rabbit
sleuth:
sampler:
probability: 1.0 #采样的百分比
rabbitmq:
host: 127.0.0.1
port: 5672
username: test
password: 123456
listener: # 这里配置了重试策略
direct:
retry:
enabled: true
simple:
retry:
enabled: true
hello-service应用application.yml 配置如下:
server:
port: 8085
spring:
application:
name: hello-service
zipkin:
base-url: http://localhost:9411/
sender:
type: rabbit
sleuth:
sampler:
probability: 1.0 #采样的百分比
rabbitmq:
host: 127.0.0.1
port: 5672
username: test
password: 123456
listener: # 这里配置了重试策略
direct:
retry:
enabled: true
simple:
retry:
enabled: true
ribbon-consumer、hello-service服务pom.xml添加如下:
<!-- zipkin -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
<!-- rabbit -->
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit</artifactId>
</dependency>
启动eureka-consumer注册中心,ribbon-consumer、hello-service服务,浏览器访问:http://localhost:9000/hello 。
访问RabbitMQ ,切换到队列ziipkin页面,有波动表示有请求链路信息发送到了队列,如下图:
用mysql客户端,查看zipkin_spans表,有记录说明 zipkin通过ribbitMQ持久化数据到了mysql,如下图:
在浏览器访问Zipkin,输入服务名ribbon-consumer,可以查询请求服务链路的信息。
至此,SringCloud分布式请求链路跟踪搭建完成。
参考:
openzipkin:https://github.com/openzipkin/zipkin