Spring Cloud Sleuth基于消息中间件收集时自定义topic

来源:互联网 发布:java项目的工作流程 编辑:程序博客网 时间:2024/06/18 06:59

            分布式服务跟踪spring cloud sleuth收集链路的方式有两种:http方式收集和消息中间件收集。这里主要说一下基于消息中间件收集时的一些技巧。不管你是采用rabbitmq还是kafka都适用。我这里用的是kafka收集,我搭建了一套kafka集群,用来测试链路收集;由于只有一套kafka环境,而我的应用却有dev、test等好几个环境,如果共用一个kafka集群的话,而且topic都叫“sleuth”,不好区分是哪个环境的,容易搞混淆。通常的做法是一个环境搭一套kafka集群,例如test环境搭一套,dev环境搭一套;当然如果嫌麻烦的话,可以这样做:

      如果你从来没有自定义过topic的话,topic的名字默认就是通道(channel)名,在springcloud配置文件中由spring.cloud.stream.bindings.input.destination和spring.cloud.stream.bindings.output.destination这两个属性决定,学过消息驱动的微服务spring cloud stream的人应该都懂;那么我们来看一下spring-cloud-sleuth-stream这个jar包中定义的通道名是什么:

public interface SleuthSink {    String INPUT = "sleuth";    @Input("sleuth")    SubscribableChannel input();}
public interface SleuthSource {    String OUTPUT = "sleuth";    @Output("sleuth")    MessageChannel output();}
     输入通道和输出通道的名字都是“sleuth”,难怪topic名字就是sleuth了;既然默认topic就是通道名,那么我们可以这样修改topic名:

spring.cloud.stream.bindings.sleuth.destination=sleuth-dev //注意黑颜色加粗字体一定要和通道名一致
这样就把topic由默认的sleuth修改为sleuth-dev了;同理在test环境只要改成sleuth-test就可以实现共用同一套kafka环境而主题不冲突了。

    另外如果主题生效了,但是没有被消费或者zipkin上没有收集到消息,请注意你是否配置了spring.zipkin.base-url参数,如果配置了该参数,会默认使用http方式收集链路信息,stream不会生效,所以采用消息中间件收集,一定要去掉此参数。

原创粉丝点击