springboot新版本(2.1.0)、springcloud新版本(Greenwich.M1)实现链路追踪的一些坑
主要问题
由于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>
其实这些都是基础操作,是吧,那么来点进阶的。
- 在sleuth-cli跟zipkin-server之间插入一个消息中间件rabbitmq/kafka,这里我举例中只使用rabbitmq来实现
- 将链路追踪的数据存储到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)实现链路追踪的一些坑相关推荐
- 企业如何从 0 到 1 构建整套全链路追踪体系
简介:本文将分享 ARMS 在全链路追踪领域的最佳实践,分享主要分为四部分.首先,是对分布式链路追踪的整体简介.其次,是对 ARMS 在分布式链路追踪领域的核心能力进行介绍.然后,介绍如何从 0 到 ...
- 谷粒商城二十五springCloud之Sleuth+Zipkin 服务链路追踪
为什么用 分布式系统庞大而复杂,服务众多,调用关系网也非常复杂, 服务上线以后如果出现了某些错误,错误的异常就很难定位. 一个请求可能调用了非常多的链路,我们需要知道到底哪一块儿出现了错误. 最终希望 ...
- 史上最简单的SpringCloud教程 | 第九篇: 服务链路追踪(Spring Cloud Sleuth)(Finchley版本)
转载请标明出处: http://blog.csdn.net/forezp/article/details/81041078 本文出自方志朋的博客 个人博客纯净版:https://www.fangzhi ...
- 史上最简单的SpringCloud教程 | 第九篇: 服务链路追踪(Spring Cloud Sleuth)
转:https://blog.csdn.net/forezp/article/details/70162074 这篇文章主要讲述服务追踪组件zipkin,Spring Cloud Sleuth集成了z ...
- SpringCloud教程 | 第九篇: 服务链路追踪(Spring Cloud Sleuth)(Finchley版本)
转载请标明出处: http://blog.csdn.net/forezp/article/details/81041078 本文出自方志朋的博客 这篇文章主要讲述服务追踪组件zipkin,Spri ...
- Springcloud 集成 Skywalking 实现全链路追踪
下载链接 https://skywalking.apache.org/downloads/ 本地搭建springcloud工程,偷懒可参考gitee https://gitee.com/wangLi1 ...
- 新版本MyEclipse-2019.4.0激活
MyEclipse在几天前又推出了新版本MyEclipse-2019.4.0,新版本感觉很强大.就安装试一下,感觉很不错. 附上激活文件:激活文件 声明: 既然是破解的,就可能会出现问题,比如之前有很 ...
- PyTorch 0.4新版本 升级指南 no_grad
PyTorch 0.4新版本 升级指南 [导读]今天大家比较关心的是PyTorch在GitHub发布0.4.0版本,专知成员Huaiwen详细讲解了PyTorch新版本的变动信息, 本次升级, 只做了 ...
- JEECG Framework 3.5.0 GA 新版本终于发布了,重量级功能(数据权限,国际化,多数据源),团队会努力推出新版本,希望大家多多支持!!
JEECG Framework 3.5.0 GA 新版本终于发布了,重量级功能(数据权限,国际化,多数据源), 今年团队会努力不断推出新版本,希望大家多多支持!! 发布地址: ...
最新文章
- mysql实现row_number()和row_number() over(partition by)
- c语言 串口中断服务函数,GCC-AVR 编写中断服务函数的注意事项
- 计算机主机漏电,电脑机箱漏电怎么办?机箱电源漏电原因及解决方法
- 在iPhone应用中使用自定义字体
- ctf php sql注入,CTF—攻防练习之HTTP—SQL注入(SSI注入)
- 评估指标_机器学习评估方法与评估指标总结
- nutch源代码阅读心得
- 5.2.2 std::atomic_flag的相关操作
- JS学习总结(6)——函数/弹出框
- RXJAVA之Subject
- 开启xmp1还是2_原神风魔龙技能打法详细教程攻略 奇货匣开启次数是否保留会刷新吗...
- 工业和信息化部教育考试中心职业技术证书有必要考吗?
- 六个主要的社会网络分析软件的比较
- Oracle数据库下载安装和卸载简单说明
- Python时区设置与pytz的应用
- 中国土地市场网lanchina.com数据采集过程
- win10笔记本电脑初始化失败以及QQ能上网页打不开问题
- 你小子代码写成这样,老夫也无可奈何
- 【转载】转别人写的HTMLCSS 详细笔记脉络--很详细
- Struts2远程命令执行漏洞
热门文章
- [转载] python的__del__()方法
- Dom4j中getStringValue()和getText()用法的区别
- 102. 二叉树的层次遍历
- 深入理解JVM之JVM内存区域与内存分配
- (转)C++ 库汇总(网址+简介)
- 数据结构上机实践第五周项目3 - 括号的匹配
- YOLO系列专题——YOLOv2理论篇
- 【回环检测】如何理解loopClosing中的连续性检测
- 汉字字符内码查询_计算机等级考试查询系统
- php和python_c语言,python和c语言的主要区别