????????在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的服务节点用来协同产生最后的请求结果,每一个前段请求都会形成一条复杂的分布式服务调用链路,链路中的任何一环出现高延迟时或错误都会引起整个请求最后的失败。
? ? ? ?Spring Cloud Sleuth 提供了一套完整的服务跟踪解决方案,在分布式系统中提供追踪解决方案并且兼容支持了 zipkin,官方源码。
下图是产品调用库存模块,发送 trace 数据, Zipkin dashboard 提供网页展现。
搭建链路监控步骤(Sluth 负责收集整理,zipkin 负责展现) 1.zipkin????????SpringCloud从F版起已不需要自己构建Zipkin server了,只需要调用jar包即可。zipkin 下载链接:Central Repository: io/zipkin/zipkin-server
?这里采用的版本是:zipkin-server-2.23.9-exec.jar
在 cmd 中运行 zipkin:java -jar?zipkin-server-2.23.9-exec.jar
一条链路通过 Trace Id 唯一标识,Span 标识发起的请求信息,各 span 通过 parent id 关联起来?
个人理解:Span Id 标识一个微服务,Parent Id 标识调用它的那个微服务的 Span Id
整个的链路依赖关系如下:?
Trace:类似于树结构中的Span 集和,表示一条调用链路,存在唯一标识
Span:表示调用链路来源,通俗的理解 Span 就是依次请求信息
2.服务提供者这里采用?cloud-provider-payment8001 作为服务的提供者
2.1、在?cloud-provider-payment8001 的 POM文件中添加如下依赖:
<dependency> <groupId>org.springframework.cloud</groupId> ? ? <artifactId>spring-cloud-starter-zipkin</artifactId> </dependency>2.2、修改其 application.yml 配置文件
server: port: 8001 spring: application: name: cloud-payment-service # 配置 zipkin 和 sleuth 相关的配置 zipkin: base-url: http://localhost:9411 sleuth: sampler: # 采样率值介于 0 到 1 之间,1 表示全部采集 probability: 1 datasource: type: com.alibaba.druid.pool.DruidDataSource # 当前数据源操作类型 driver-class-name: com.mysql.cj.jdbc.Driver # mysql 驱动包 url: jdbc:mysql://服务器IP地址:3306/db2019?useUnicode=true&characterEncoding=utf-8&useSSL=false username: root password: MySQL123456MySQL mybatis: mapper-locations: classpath:mapper/*.xml type-aliases-package: com.atyixuan.springcloud.entities # 所有的 entity 别名类所在包 eureka: instance: instance-id: payment8001 prefer-ip-address: true # Eureka 客户端向服务器发送心跳的时间间隔,单位为秒(默认是 30秒) lease-renewal-interval-in-seconds: 30 # Eureka 服务端在收到最后一次心跳后等待时间上限,单位为秒(默认是 90秒),超时将剔除服务 lease-expiration-duration-in-seconds: 90 client: register-with-eureka: true fetch-registry: true service-url: defaultZone: http://eureka7001.com:7001/eureka # , http://eureka7002.com:7002/eureka2.3、业务类:在?Controller 中添加方法,com.atyixuan.springcloud.controller.PaymentController
添加的业务方法如下,直接追加到?PaymentController 的结尾:
@GetMapping("/payment/zipkin") public String paymentZipkin() { return "hi ,i'am paymentzipkin server fall back,welcome to atguigu,O(∩_∩)O哈哈~"; } 3.服务消费者(调用方)这里采用?cloud-consumer-order80 作为服务的消费者
3.1、在?cloud-provider-payment8001 的 POM文件中添加如下依赖:
<dependency> <groupId>org.springframework.cloud</groupId> ? ? <artifactId>spring-cloud-starter-zipkin</artifactId> </dependency>3.2、修改其 application.yml 配置文件
server: port: 80 spring: application: name: cloud-order-service # zipkin 和 sleuth 的相关配置 zipkin: base-url: http://localhost:9411 sleuth: sampler: probability: 1 eureka: client: register-with-eureka: true fetch-registry: true service-url: defaultZone: http://localhost:7001/eureka # defaultZone: http://eureka7001.com:7001/eureka, http://eureka7002.com:7002/eureka3.3、业务类:在?Controller 中添加方法,com.atyixuan.springcloud.controller.OrderController
添加的业务方法如下,直接追加到?OrderController?的结尾:
// ====================> zipkin+sleuth @GetMapping("/consumer/payment/zipkin") public String paymentZipkin() { return restTemplate.getForObject("http://localhost:8001"+"/payment/zipkin/", String.class); } 测试依次启动:
cloud-eureka-server7001、cloud-provider-payment8001 和?cloud-consumer-order80
浏览器中输入:http://localhost/consumer/payment/zipkin
浏览器输入:http://localhost:9411/zipkin/
跳转到依赖这一栏:单击搜索框,左边的下拉菜单显示当前使用的服务名称
?在下拉框中选中一个服务:这里以?cloud-payment-service 为例,下图显示 23次访问,访问出错 0 次,单击 TRACES? ?可以显示每一次访问的细节
单击?TRACES 之后,单击 RUN QUERY 查询最近访问的 10 条结果
这里显示访问持续的时间是 9.047 ms,标签显示是 GET 请求,请求路径是? /consumer/payment/zipkin ,发出请求的Controller 类是?OrderController,请求的方法是paymentZipkin()
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。 |
标签: #Spring #Cloud #学习笔记之12 #Sleuth分布式请求链路追踪