主要问题

由于springboot新版本(2.1.0)、springcloud新版本(Greenwich.M1)实现链路追踪sleuth+zipkin的一些“新特性”,使得我在实现sleuth+zipkin的过程上踩了不少坑。

在springboot1.X版本的时候,实现链路追踪服务需要用户自己实现client以及server,通常在server服务端需要引入各种各样的包(spring-cloud-sleuth-stream,以及支持zipkin的一些相关依赖包等等);

但在spring cloud新版本实现链路追踪sleuth+zipkin的方式上已经不再需要自己再去实现一个server服务端(集成sleuth+zipkin),而是由zinkin官方提供了一个现成的zipkin-server.jar,或者是一个docker镜像,用户可以下载并通过命令进行启动它,用户可以通一些配置来确定sleuth收集到信息后传输到zipkin之间采用http,还是通过rabbit/kafka的方式。在新的版本下,用户只需要关注slenth-client选用何种传输方式(http或mq(rabbit/kafka),如果选择http,则在配置中指明base-url;如果选择mq,则在配置指明相关消息中间件的相关信息host/port/username/password...),至于zipkin的信息storage问题,则由zipkin-server要负责,可以通过zipkin-server.jar 配置一些具体的参数来启动。(下面会细讲)

ps:这不是教程贴,这主要是解决一些问题的一些方法,不会有详细的实现过程,但为了简明我会贴上部分代码。

背景

最近开始实习了,老大让我自学一下sc(spring cloud),学就学嘛,也不是难事。看完spring cloud的全家桶,老大说让我重点了解一下它的链路追踪服务,后期会有这方面的任务安排给我做,所以呢我就重点关注这一方面,打算自己做个demo练练手,看了网上的教程,膨胀的我选择了个最新的版本,结果发现就这么掉坑里了。。。

版本

按照惯例,先说下springboot跟spring cloud的版本
springboot:2.1.0
springcloud:Greenwich.M1
个人建议新手不要过分追求新版本,旧版本的还是够用的,比springboot 2.6.0搭配sringcloud Finchley SR2还是挺稳的,如果真的要探索新版本你会发现这里面的坑实在是踩不完,基本要花个一两天才能让自己从坑里跳出去,这样频繁踩坑会让新手很容易放弃~~~
ps:不要问我为什么知道。。。

主要问题

闲话扯完了,可以进入正题了
一共四个服务
eureka-server
zipkin-server:新版本的zipkin服务端,负责接受sleuth发送过来的数据,完成处理、存储、建立索引,并且提供了一个可视化的ui数据分析界面。
需要的同学话可以直接在github上下载https://github.com/openzipkin...

嗯就是这两个家伙
下面两个是两个服务

eureka-server服务注册中心,这个实现我就不讲了,网上搜一大把,各个版本实现基本都是一致的,并不存在版本更新跨度极大的情况。而且这里我把它是打包成一个jar包,在需要的时候直接用java -jar XXX.jar 直接启动

至于product跟order(也即实际场景下各种种样的服务A、B、C...)

order服务只有一个接口/test,去调用product的接口

这里的productclient就是使用feignf去调用order的/product/list接口

product只有一个接口/product/list,查找所有商品的列表

简单的来说,这里的场景就是order服务--(去调用)-->product服务

说完场景后,贴一下这两个服务的相关配置信息(order跟producet的配置基本上是相同的)
application.yml

spring:application:#服务名name: product#由于业务逻辑需要操作数据库,所以这里配置了mysql的一些信息datasource:driver-class-name: com.mysql.jdbc.Driverusername: rootpassword: 123456url: jdbc:mysql://127.0.0.1:3306/sc_sell?characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghaijpa:show-sql: true#重点zipkin:#base-url:当你设置sleuth-cli收集信息后通过http传输到zinkin-server时,需要在这里配置base-url: http://localhost:9411enabled: truesleuth:sampler:#收集追踪信息的比率,如果是0.1则表示只记录10%的追踪数据,如果要全部追踪,设置为1(实际场景不推荐,因为会造成不小的性能消耗)probability: 1
eureka:client:service-url:#注册中心地址defaultZone: http://localhost:8999/eureka/
logging:level:#这个是设置feign的一个日志级别,key-val的形式设置org.springframework.cloud.openfeign: debug

说完配置信息,就该讲一下依赖了,很简单,client实现链路追踪只需要添加一个依赖spring-cloud-starter-zipkin。就是这个

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

其实这些都是基础操作,是吧,那么来点进阶的。

  1. 在sleuth-cli跟zipkin-server之间插入一个消息中间件rabbitmq/kafka,这里我举例中只使用rabbitmq来实现
  2. 将链路追踪的数据存储到DB上,目前zipkin暂时只支持mysql/elasticsearch,这里我使用mysql

如果你是刚开始学习sc,给你去实现的话,你肯定会开始打开浏览器开始搜索教程。
结果你会发现,大部分博客上都是以前版本的实现方式,一些较旧会让你自己实现一个zipkin-server(我怀疑他们的版本是1.x),你会发现很郁闷,因为这跟你想象的不太一样啊。
继续找,终于在茫茫帖子中,找到了一篇是关于springboot2.0.X版本的实现链路追踪的教程,这时候你会兴奋,终于找到靠谱一点的啊,喜出望外有木有啊,但是,事情还没完,它会让你在客户端依赖下面这个依赖包

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

结果你会发现,你在依赖它的时候,其实是依赖不了,为什么?因为版本的问题,什么?你跟我说你的pom文件没报错啊,但是,你打开idea右边的maven插件看一下

这真的是一个巨坑,我一直不明白是怎么回事,直到有一次,我打开了这个页面,花了我一天的时间去摸索是什么原因造成的集成rabbitmq失败,真的是被安排得明明白白

最后,豪无头绪的我,继续在网上查找一些springboot2.x版本的一些链路追踪的教程,在搜索了一个下午,我突然想起,诶不对,我应该直接去官网看它的官方教程的啊。。。虽然都英文,大不了我用chrome自带的翻译工具翻译一下咯。结果就立马打开spring的官网,选择了最新的版本,进去找了一下,还真的让我找到了!!!
不得不说官方文档的重要性!
https://cloud.spring.io/sprin...

springboot新版本(2.1.0)、springcloud新版本(Greenwich.M1)实现链路追踪的一些坑相关推荐

  1. 企业如何从 0 到 1 构建整套全链路追踪体系

    简介:本文将分享 ARMS 在全链路追踪领域的最佳实践,分享主要分为四部分.首先,是对分布式链路追踪的整体简介.其次,是对 ARMS 在分布式链路追踪领域的核心能力进行介绍.然后,介绍如何从 0 到 ...

  2. 谷粒商城二十五springCloud之Sleuth+Zipkin 服务链路追踪

    为什么用 分布式系统庞大而复杂,服务众多,调用关系网也非常复杂, 服务上线以后如果出现了某些错误,错误的异常就很难定位. 一个请求可能调用了非常多的链路,我们需要知道到底哪一块儿出现了错误. 最终希望 ...

  3. 史上最简单的SpringCloud教程 | 第九篇: 服务链路追踪(Spring Cloud Sleuth)(Finchley版本)

    转载请标明出处: http://blog.csdn.net/forezp/article/details/81041078 本文出自方志朋的博客 个人博客纯净版:https://www.fangzhi ...

  4. 史上最简单的SpringCloud教程 | 第九篇: 服务链路追踪(Spring Cloud Sleuth)

    转:https://blog.csdn.net/forezp/article/details/70162074 这篇文章主要讲述服务追踪组件zipkin,Spring Cloud Sleuth集成了z ...

  5. SpringCloud教程 | 第九篇: 服务链路追踪(Spring Cloud Sleuth)(Finchley版本)

    转载请标明出处:  http://blog.csdn.net/forezp/article/details/81041078  本文出自方志朋的博客 这篇文章主要讲述服务追踪组件zipkin,Spri ...

  6. Springcloud 集成 Skywalking 实现全链路追踪

    下载链接 https://skywalking.apache.org/downloads/ 本地搭建springcloud工程,偷懒可参考gitee https://gitee.com/wangLi1 ...

  7. 新版本MyEclipse-2019.4.0激活

    MyEclipse在几天前又推出了新版本MyEclipse-2019.4.0,新版本感觉很强大.就安装试一下,感觉很不错. 附上激活文件:激活文件 声明: 既然是破解的,就可能会出现问题,比如之前有很 ...

  8. PyTorch 0.4新版本 升级指南 no_grad

    PyTorch 0.4新版本 升级指南 [导读]今天大家比较关心的是PyTorch在GitHub发布0.4.0版本,专知成员Huaiwen详细讲解了PyTorch新版本的变动信息, 本次升级, 只做了 ...

  9. JEECG Framework 3.5.0 GA 新版本终于发布了,重量级功能(数据权限,国际化,多数据源),团队会努力推出新版本,希望大家多多支持!!

     JEECG Framework 3.5.0 GA 新版本终于发布了,重量级功能(数据权限,国际化,多数据源),            今年团队会努力不断推出新版本,希望大家多多支持!! 发布地址: ...

最新文章

  1. mysql实现row_number()和row_number() over(partition by)
  2. c语言 串口中断服务函数,GCC-AVR 编写中断服务函数的注意事项
  3. 计算机主机漏电,电脑机箱漏电怎么办?机箱电源漏电原因及解决方法
  4. 在iPhone应用中使用自定义字体
  5. ctf php sql注入,CTF—攻防练习之HTTP—SQL注入(SSI注入)
  6. 评估指标_机器学习评估方法与评估指标总结
  7. nutch源代码阅读心得
  8. 5.2.2 std::atomic_flag的相关操作
  9. JS学习总结(6)——函数/弹出框
  10. RXJAVA之Subject
  11. 开启xmp1还是2_原神风魔龙技能打法详细教程攻略 奇货匣开启次数是否保留会刷新吗...
  12. 工业和信息化部教育考试中心职业技术证书有必要考吗?
  13. 六个主要的社会网络分析软件的比较
  14. Oracle数据库下载安装和卸载简单说明
  15. Python时区设置与pytz的应用
  16. 中国土地市场网lanchina.com数据采集过程
  17. win10笔记本电脑初始化失败以及QQ能上网页打不开问题
  18. 你小子代码写成这样,老夫也无可奈何
  19. 【转载】转别人写的HTMLCSS 详细笔记脉络--很详细
  20. Struts2远程命令执行漏洞

热门文章

  1. [转载] python的__del__()方法
  2. Dom4j中getStringValue()和getText()用法的区别
  3. 102. 二叉树的层次遍历
  4. 深入理解JVM之JVM内存区域与内存分配
  5. (转)C++ 库汇总(网址+简介)
  6. 数据结构上机实践第五周项目3 - 括号的匹配
  7. YOLO系列专题——YOLOv2理论篇
  8. 【回环检测】如何理解loopClosing中的连续性检测
  9. 汉字字符内码查询_计算机等级考试查询系统
  10. php和python_c语言,python和c语言的主要区别