基于消息中间件收集数据
在默认情况下,Zipkin客户端和Server之间是使用HTTP请求的方式进行通信(即同步的请求方式),在网络波动,Server端异常等情况下可能存在信息收集不及时的问题。Zipkin支持与rabbitMQ整合完成异步消息传输。
加了MQ之后,通信过程如下图所示:
RabbitMQ的安装与启动:
windows安装参考地址:
https://blog.csdn.net/caicaimaomao/article/details/126083515
服务端启动
java -jar zipkin-server-2.12.9-exec.jar --RABBIT_ADDRESSES=127.0.0.1:5672
RABBIT_ADDRESSES : 指定RabbitMQ地址、RABBIT_USER: 用户名(默认guest)、RABBIT_PASSWORD : 密码(默认guest)
启动Zipkin Server之后,我们打开RabbitMQ的控制台可以看到多了一个Queue :
其中 zipkin 就是为我们自动创建的Queue队列。
客户端配置:
(1) 配置依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-sleuth-zipkin</artifactId> </dependency> <dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit</artifactId> </dependency>
导入 spring-rabbit 依赖,是Spring提供的对rabbit的封装,客户端会根据配置自动的生产消息并发送到目标队列中。
(2) 配置消息中间件rabbit mq地址等信息
zipkin: #base-url: http://127.0.0.1:9411/ #zipkin server的请求地址 sender: type: rabbit sleuth: sampler: probability: 1.0 #采样的百分比 rabbitmq: host: localhost port: 5672 username: guest password: guest listener: # 这里配置了重试策略 direct: retry: enabled: true simple: retry: enabled: true
修改消息的投递方式,改为rabbit即可,添加rabbitmq的相关配置。
(3) 测试
关闭Zipkin Server,并随意发送请求。打开rabbitmq管理后台可以看到,消息已经推送到rabbitmq。当Zipkin Server启动时,会自动的从rabbitmq获取消息并消费,展示追踪数据。
解决问题:
1、请求的耗时时间不会出现突然耗时特长的情况,因为请求的链路调用日志都异步的推送到rabbitmq中了。
2、当ZipkinServer不可用时(比如关闭、网络不通等),追踪信息不会丢失,因为这些信息会保存在Rabbitmq服务器上,直到Zipkin服务器可用时,再从Rabbitmq中取出这段时间的消息。