您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码: ?验证码,看不清楚?请点击刷新验证码 必填



? 求知 文章 文库 Lib 视频 iProcess 课程 认证 咨询 工具 讲座 Modeler ? bet36账号怎么注册 ?
会员???
?
? ?
?
??
每天15篇文章
不仅获得谋生技能
更可以追随信仰
?
? ? ?
? ?
?订阅
? 捐助
SpringCloud Sleuth入门介绍
?
17 次浏览 ????评价: ?
?2019-9-27
? ?
?
编辑推荐:

本文来自于cloud.tencent,文章介绍了微服务的现状,以及通过一个简单的微服务调用案例来演示下Sleuth是怎么跟踪请求调用的。

一、Sleuth介绍

为什么要使用微服务跟踪?它解决了什么问题?

1.微服务的现状?

微服务的现状

随着业务的发展,单体架构变为微服务架构,并且系统规模也变得越来越大,各微服务间的调用关系也变得越来越复杂。

多服务协同工作

在微服务的应用中,一个由客户端发起的请求在后端系统中会经过多个不同的微服务调用来协同产生最后的请求结果

复杂的调用链条容易出错

在复杂的微服务架构系统中,几乎每一个前端请求都会形成一个复杂的分布式服务调用链路,在每条链路中任何一个依赖服务出现延迟超时或者错误都有可能引起整个请求最后的失败

例如:

在微服务系统中,一个来自用户的请求,请求先达到前端A(如前端界面)然后通过远程调用,到达系统中间件B,C(负载均衡,网关等),最后达到后端服务D,E,后端经过一系列的业务逻辑计算最后将数据返回给用户,对于这样一个请求,经历了这么多个服务,怎么样将它的请求过程的数据记录下来呢?这就需要用到服务链路追踪

2.微服务跟踪解决了什么问题?

微服务跟踪(sleuth)其实是一个工具,它在整个分布式系统中能跟踪一个用户请求的过程(包括数据采集,数据传输,数据存储,数据分析,数据可视化),捕获这些跟踪数据,就能构建微服务的整个调用链的视图,这是调试和监控微服务的关键工具。

SpringCloudSleuth有4个特点

二、Sleuth案例

我们通过一个简单的微服务调用案例来演示下Sleuth是怎么跟踪请求调用的,案例结构图如下:

1.创建sleuth-product-service服务

1.1 创建服务

1.2 创建pojo

此处的Product类以及相关代码在GitHub上

1.3 创建service接口

@RequestMapping("/product")
public interface ProductService {

@RequestMapping(value="findAll", method=RequestMethod.GET)
public List findAll();
}

2.创建sleuth-product-provider服务

2.1 创建项目

2.2 pom文件

注意添加sleuth的依赖


xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0

org.springframework.boot
spring-boot-starter-parent
1.5.13.RELEASE


com.bobo
sleuth-product-provider
0.0.1-SNAPSHOT



org.springframework.boot
spring-boot-starter-web


org.mybatis.spring.boot
mybatis-spring-boot-starter
1.3.4


org.springframework.boot
spring-boot-starter-test
test


org.springframework.cloud
spring-cloud-starter-eureka



mysql
mysql-connector-java
5.1.47


com.bobo
sleuth-product-service
0.0.1-SNAPSHOT


org.springframework.cloud
spring-cloud-starter-sleuth







org.springframework.cloud
spring-cloud-dependencies
Dalston.SR5
pom
import






org.springframework.boot
spring-boot-maven-plugin



2.3 配置文件

没有特殊的

spring.application.name=sleuth-product
server.port=9001
#\u8BBE\u7F6E\u670D\u52A1\u6CE8\u518C\ u4E2D\u5FC3\u5730\u5740\uFF0C\u6307\u5411 \u53E6\u4E00\u4E2A\u6CE8\u518C\u4E2D\u5FC3
eureka.client.serviceUrl.defaultZone= http://dpb:123456@eureka1:8761/eureka/, http://dpb:123456@eureka2:8761/eureka/
#--------------db----------------
mybatis.type-aliases-package= com.book.product.pojo
mybatis.mapper-locations= classpath:com/bobo/product/mapper/*.xml

spring.datasource.driverClassName= com.mysql.jdbc.Driver
spring.datasource.url= jdbc:mysql://localhost:3306 /book-product?useUnicode= true&characterEncoding= UTF-8& zeroDateTimeBehavior =convertToNull
spring.datasource.username =root
spring.datasource.password=123456

注意添加日志配置文件,日志级别设置为debug

2.4 业务代码

业务代码提供了对商品数据的查询。

3.创建sleuth-consumer服务

3.1 创建项目

3.2 pom文件

统一注意添加sleuth的依赖


xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0

org.springframework.boot
spring-boot-starter-parent
1.5.13.RELEASE

com.bobo
sleuth-consumer
0.0.1-SNAPSHOT



org.springframework.cloud
spring-cloud-dependencies
Dalston.SR5
pom
import





org.springframework.boot
spring-boot-starter-web


org.springframework.cloud
spring-cloud-starter-eureka



org.springframework.cloud
spring-cloud-starter-feign



com.bobo
sleuth-product-service
0.0.1-SNAPSHOT


org.springframework.cloud
spring-cloud-starter-sleuth





org.springframework.boot
spring-boot-maven-plugin



3.3 配置文件

没有特殊的配置

spring.application.name=e-book-consumer
server.port=9010
#\u8BBE\u7F6E\u670D\u52A1\u6CE8\u518C\u4E2D \u5FC3\u5730\u5740\uFF0C\u6307\u5411\u53E6\ u4E00\u4E2A\u6CE8\u518C\u4E2D\u5FC3
eureka.client.serviceUrl.defaultZone =http://dpb:123456@eureka1:8761/eureka/, http://dpb:123456@eureka2:8761/eureka/

3.4 业务代码

通过Feign实现对商品服务的调用,具体代码见GitHub,地址在头部

4.服务跟踪

先启动product服务,然后启动consumer服务,访问:http://localhost:9010/find

请求访问成功,注意查看控制台信息

consumer的控制器

product的控制台信息

5.Sleuth 日志分析

Created new Feign span [Trace: cbe97e67ce162943, Span: bb1798f7a7c9c142, Parent: cbe97e67ce162943, exportable:false]
# 调用 product服务
2019-06-30 09:43:24.022 [http-nio-9010-exec-8] DEBUG o.s.c.s.i.web.client.feign.TraceFeignClient - The modified request equals GET http://localhost:9001/product/findAll HTTP/1.1

X-B3-ParentSpanId: cbe97e67ce162943
X-B3-Sampled: 0
X-B3-TraceId: cbe97e67ce162943
X-Span-Name: http:/product/findAll
X-B3-SpanId: bb1798f7a7c9c142

# product中的日志输出
## product 被调用
[findAll] to a span [Trace: cbe97e67ce162943, Span: bb1798f7a7c9c142, Parent: cbe97e67ce162943, exportable:false]
Adding a class tag with value [ProductController] to a span [Trace: cbe97e67ce162943, Span: bb1798f7a7c9c142, Parent: cbe97e67ce162943, exportable:false]
## 调用数据库操作
org.mybatis.spring.SqlSessionUtils - Creating a new SqlSession
org.mybatis.spring.SqlSessionUtils - SqlSession [org.apache.ibatis.session.defaults .DefaultSqlSession@42858a0e] was not registered for synchronization because synchronization is not active
o.springframework.jdbc.datasource. DataSourceUtils - Fetching JDBC Connection from DataSource
o.m.spring.transaction.SpringManagedTransaction - JDBC Connection [ProxyConnection[PooledConnection [com.mysql.jdbc.JDBC4Connection@7981208d]]] will not be managed by Spring
com.bobo.mapper.ProductMapper.selectByExample - ==> Preparing: select id, name, status, price, deleted, create_time, update_time from product
com.bobo.mapper.ProductMapper.selectByExample - ==> Parameters:
com.bobo.mapper.ProductMapper.selectByExample - <== Total: 3
## 结束请求
o.s.cloud.sleuth.instrument.web.TraceFilter - Closing the span [Trace: cbe97e67ce162943, Span: bb1798f7a7c9c142, Parent: cbe97e67ce162943, exportable:false] since the response was successful


# consumer 中调用服务结束
Closing Feign span and logging CR [Trace: cbe97e67ce162943, Span: bb1798f7a7c9c142, Parent: cbe97e67ce162943, exportable:false]
Closing Feign span [Trace: cbe97e67ce162943, Span: bb1798f7a7c9c142, Parent: cbe97e67ce162943, exportable:false]

如上,通过日志我们可以看出服务调用的相关过程

案例代码

?
? ?
17 次浏览 ?评价: 差? 订阅 捐助
相关文章

阻碍使用企业架构的原因及克服方法
世界级企业架构的行业挑战
企业架构和SOA架构的角色将融合
什么最适合您的组织?
相关文档

企业架构与ITIL
企业架构框架
Zachman企业架构框架简介
企业架构让SOA落地
相关课程

企业架构设计
软件架构案例分析和最佳实践
嵌入式软件架构设计—高级实践
企业级SOA架构实践
每天2个文档/视频
扫描微信二维码订阅
订阅技术月刊
获得每月300个技术资源
?
?

关于我们 | 联系我们 |?京ICP备10020922号?京公海网安备110108001071号