使用RabbitMQ收集链路数据
前面章节通过Spring Cloud Sleuth整合Zipkin,已经实现了通过HTTP方式收集链路跟踪信息,除了使用HTTP方式之外,还可以使用RabbitMQ消息中间件异步收集链路跟踪信息。本节讲解如何通过RabbitMQ收集链路信息。
现在网络上实现微服务分布式链路追踪的资料,所使用的Spring Cloud绝大多数都是比较老的版本,由于在Spring Boot2.0以上的版本中,官方不再推荐使用自建Zipkin Server的方式进行服务链路追踪,而是直接提供了编译好的 jar 包供开发者使用。接下来我们使用官方准备好的Zipkin Server的jar包讲解如何通过RabbitMQ收集链路数据。
具体步骤如下:
1、 下载zipkin.jar
从Zipkin官方网站https://zipkin.io/pages/quickstart.html
下载Zipkin Server的jar包,这里我们使用的是2.17.1版本。
2、 启动zipkin.jar
(1)保证RabbitMQ启动的情况下,启动zipkin.jar。打开cmd命令行窗口,进入 zipkin.jar包所在的目录下,输入下列命令。
java -jar zipkin-server-2.17.1-exec.jar
--zipkin.collector.rabbitmq.addresses=localhost
执行上述命令后,如果看到命令行中出现“Started ZipkinServer in 3.212 seconds (JVM running for 4.165)”字样时,表示命令执行成功,具体如图1所示。
图1 zipkin.jar启动成功效果图
(2)Zipkin启动成功后,使用浏览器访问http://127.0.0.1:15762
。此时,我们会发现RabbitMQ控制台中的 Queues选项中可以看到多了一个“zipkin”队列,说明Zipkin Server与RabbitMQ之间建立了通信,如图2所示。
图2 启动zipkin.jar成功后RabbitMQ控制台效果图
(3)使用浏览器访问http://localhost:9411/zipkin/
,发现Zipkin官方在jar包中对Zipkin的UI页面做了一些汉化。如图3所示。
图3 zipkin.jar启动成功后Zipkin的UI界面效果图
3、 对项目进行改造
接下来,我们在前面小节的基础行进行改造。在生产者eureka-provider、消费者 eureka-consumer和网关服务gateway-service都添加对Zipkin支持的依赖spring-cloud-starter-zipkin以及操作RabbitMQ的依赖spring-boot-starter-amqp,如下所示。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
4、 测试运行
(1)依次启动eureka-server、eureka-provider、eureka-consumer和gateway- service,在浏览器访问http://localhost:9410/eureka-provider/service1
,访问结果如图4所示。
图4 通过网关服务访问生产者效果图
(2)成功访问http://localhost:9410/eureka-provider/service1
的同时,查看 RabbitMQ控制台,可以看到Totals下的消息曲线图有了相应的变化,如图5所示。
图5 RabbitMQ消息曲线图变化效果图
在图5中,网关使用生产者调用消费者时,RabbitMQ控制台中的消息曲线图发生了短暂的变化。也就是说,两个服务之间在互相调用的时候,不仅将数据发送到了Zipkin Server,也发送到了RabbitMQ的“zipkin”队列中,即通过这种方式,实现了微服务调用链路上数据的存储与解耦,即使网络断掉,消息依然可以追踪。
(3)最后,访问Zipkin的UI界面,可以看到调用过程中的相关的服务名、调用耗时等相关信息,如图6所示。
图6 Zipkin的UI界面效果图
小提示:
本案例采用了RabbitMQ的默认配置,当然也可以在启动zipkin.jar时自定义 RabbitMQ的相关配置,例如,端口号、用户名和密码等。示例代码如下:
java -jar zipkin-server-2.17.1-exec.jar
--zipkin.collector.rabbitmq.addresses=localhost:5672
--zipkin.collector.rabbitmq.username=springcloud
--zipkin.collector.rabbitmq.password=admin
如果想查看更多参数的用法,可以先解压Zipkin Server的jar包,然后在BOOT-INF/classes/zipkin-server-shared.yml查阅。