在Spring Cloud Sleuth集成时,发现与Spring Cloud Bus存在冲突,这在上一章实例中已经说明及解决,这里任然单独列出,方便问题搜索,万一存在同样问题的小伙伴呢。
一、问题描述
项目已使用Spring Cloud Bus动态刷新Config配置文件,Bus使用的是RabbitMq,依赖jar为spring-cloud-starter-bus-amqp。
然后引入组件Sleuth,Sleuth依赖spring-cloud-starter-zipkin。
然后发现,zipkin界面并不展示引入了Bus的服务,也无法收集对应服务的请求状态,而另外没有使用Bus的服务则可以被收集,因此排除了zipkin本身的问题。
当注掉spring-cloud-starter-bus-amqp依赖后,请求通信可以成功被收集,于是可以看出,zipkin与bus存在冲突。
冲突原因猜想,zipkin与服务间通信默认使用的是 http的方式,而在引入spring-rabbit后,zipkin与服务间通信会变成使用rabbitmq,所以Zipkin Server便再无法正确收集到请求调用信息。
二、解决方案
1.放弃使用Bus,额,如果这也算一种方案的话。
2.引入spring-rabbit后,zipkin与服务间通信会变成使用rabbitmq,使得zipkin默认的http通信机制不生效,所以我们明确指明zipkin使用http通信即可。在使用了Bus的服务配置文件中添加spring.zipkin.sender.type: web,告诉zipkin使用http通信,这个设置后,zipkin请求收集正常,但是Bus读取Config配置文件报错,还需要添加spring.sleuth.web.client.enabled:true,之后报错消失,zipkin使用正常。
3.如果项目允许,更改zipkin的通信方式为RabbitMq。
详情可以查看系列博文Sleuth集成:https://blog.csdn.net/Simple_Yangger/article/details/90141540