您的位置:首页 > 编程语言 > Java开发

Spring Cloud Sleuth与Zipkin整合时遇到的问题记录

2017-08-28 20:23 1866 查看
    在《spring cloud 微服务实战》第402页-----将spring cloud sleuth的跟踪信息通过消息中间件收集发送到zipkin这一部分,在之前你已经按照第一种方式(http方式)将跟踪信息收集到了zipkin上,现在又跟着书上用消息中间件来收集。紧接着书上说只要对之前的trace-1和trace-2以及zipkin-server这三个项目做一些改造就可以实现,书上分两步来完成改造。你按照书上的进行改造发现有可能运行不成功。

    首先第一步:修改客户端trace-1和trace-2,书上说除了引入spring-cloud-starter-sleuth依赖外,还要引入一下两个

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-sleuth-stream</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>

但是你启动项目时会报如下错,根本启动不成功:

Parameter 0 of method sleuthStreamSpanReporter in org.springframework.cloud.sleuth.stream.SleuthStreamAutoConfiguration required a bean of type 'org.springframework.cloud.sleuth.stream.HostLocator' that could not
be found.

    - Bean method 'zipkinEndpointLocator' not loaded because @ConditionalOnProperty (spring.zipkin.locator.discovery.enabled=true) did not find property 'spring.zipkin.locator.discovery.enabled'

Action:

Consider revisiting the conditions above or defining a bean of type 'org.springframework.cloud.sleuth.stream.HostLocator' in your configuration.

   原因是你如果直接在前面创建的trace-1和trace-2上修改,仅仅添加上面那两个依赖是不够的,你还要将之前用http方式实现收集的依赖去掉,否则会冲突,项目起不来

<!--<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-sleuth-zipkin</artifactId>
</dependency>-->

   把这个注掉以后项目能运行了(trace-1和trace-2都要注掉),一切都看似正常;但是当你不断的发送http:/localhost:9101/trace-1调试的时候,你明明看到rabbitmq消息队列里面已经有消息进入了,但是打开zipkin的ui界面却什么信息都没有。这不正常啊,后来到作者的git仓库看随书代码示例,才发现zipkin-server的改造除了要加书上提的依赖以外,还要将主类上的注解修改为如下:

@EnableZipkinStreamServer
@SpringBootApplication
public class ZipkinServerApplication {

public static void main(String[] args) {
SpringApplication.run(ZipkinServerApplication.class, args);
}
}

      刚开始用http方式收集用的是@EnableZipkinServer注解,后来用消息代理收集,就要改成@EnableZipkinStreamServer注解,为什么书上改造的时候不说要改这个,害得我纳闷半天,就是没有反应;书上内容真不严谨,太坑了。另外zipkin-server这边的application.properties中也要加入rabbitmq的配置信息(书上没说),修改完后,再发送请求,打开zipkin的UI界面,如愿看到了跟踪信息

      最后一个问题是在将服务跟踪信息持久化到mysql时,我按照书上第416页采用在application.properties添加mysql的配置信息这种方式来初始化表信息的方式,启动项目的时候一直报com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown database 'zipkin',后来才明白不管你是采用手动建表还是这种配置的方式自动初始化表,都要先手动创建数据库zipkin,要不然就会一直报那个错,我以为它会还会帮你初始化数据库,看来理解错了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  springcloud sleuth zipkin