共计 2878 个字符,预计需要花费 8 分钟才能阅读完成。
这篇文章将为大家详细讲解有关 Spring Cloud 中 Sleuth 如何整合 Zipkin,丸趣 TV 小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
Sleuth 整合 ZipkinZipkin 简介
Zipkin 是一个分布式的跟踪系统,主要用于收集、管理微服务所产生的数据。Zipkin 的设计基于 Google Dapper。在实际应用时,我们需要让各个微服务,向 Zipkin 服务器报告过程数据。对于 Spring Cloud 来说,已经提供了几个模块来实现数据报告功能,我们仅需要加入依赖,以及做简单配置,即可实现向 Zipkin“写入”数据。
Zipkin 在得到这些数据后,提供了数据查询、分析的功能,这些图形化的功能,可以让我们对微服务的调用过程、处理时间、依赖关系等数据一目了然。
构建 Zipkin 服务器项目
启动 Zipkin 服务器,可以选择使用 jar 包的方式,也可以往 Maven 项目中嵌入 Zipkin 服务器。
使用 jar 包启动,需要先下载 Zipkin 的启动 jar 包,读者可以到 Zipkin 的官方网站下载,地址为:http://zipkin.io/,也可以直接到本书的 soft 目录中下载 zipkin-server-1.31.1-exec.jar。得到 jar 包后,使用“java -jar”命令启动 Zipkin 服务器,成功启动后,默认占用 9411 端口。
我们也可以在 Maven 项目中嵌入 Zipkin 服务器,为了简单起见,直接结合 Sping Boot 来构建 Zipkin 服务器。新建 zk-server 项目(代码目录为 codes\10\zk-server),项目所使用的依赖请见代码清单 10-1。
代码清单 10-1:codes\10\zk-server\pom.xml
dependency
groupId io.zipkin.java /groupId
artifactId zipkin-server /artifactId
/dependency
dependency
groupId io.zipkin.java /groupId
artifactId zipkin-autoconfigure-ui /artifactId
scope runtime /scope
/dependency
在 application.xml 中,将启动端口配置为 9411,代码清单 10- 2 为启动类。
代码清单 10-2:codes\10\zk-server\src\main\java\org\crazyit\cloud\ZkServerApp.java
@SpringBootApplication
@EnableZipkinServer
public class ZkServerApp { public static void main(String[] args) { SpringApplication.run(ZkServerApp.class, args);
}
}
为启动类加上 @EnableZipkinServer 注解,运行启动类,访问:http://localhost:9411,可以看到 Zipkin 的主界面,如图 10- 3 所示。
图 10-3 Zipkin 主界面
配置微服务
接下来,需要配置各个微服务,让它们往 Zipkin 服务器写入数据。本章案例主要有 3 个微服务模块:图书、支付、销售。几个模块提供了以下服务:
图书模块(test-book-service):提供了图书查询服务,地址为“/book/{bookId}”,返回一个 Book 对象。
支付模块(test-pay-service):提供支付服务,地址为“/pay”,没有返回,仅做简单的控制台输出。
销售模块(test-sale-service):提供销售服务,地址为“/sale/{bookId}”,会调用图书模块和支付模块的接口,销售服务的实现,请见代码清单 10-3。
代码清单 10-3:
codes\10\test-sale-service\src\main\java\org\crazyit\cloud\SaleApplication.java
@RequestMapping(method = RequestMethod.GET, value = /sale/{bookId} )
public String sale(@PathVariable( bookId) Integer bookId) {
System.out.println( 销售模块处理销售
// 查找书本
Book book = bookService.getBook(bookId);
// 进行支付
payService.doPay(new BigDecimal(10));
return 销售成功,书名: + book.getName() + , 作者: + book.getAuthor();
}
销售模块调用图书、支付模块接口,使用的是 Feign 框架,该框架的使用,读者可参考本书的相关章节,在此不再赘述。
实现了微服务后,加 3 个模块加入以下依赖:
dependency
groupId org.springframework.cloud /groupId
artifactId spring-cloud-starter-zipkin /artifactId
/dependency
dependency
groupId org.springframework.cloud /groupId
artifactId spring-cloud-sleuth-zipkin /artifactId
/dependency
接下来,还要为各个模块配置 Zipkin 服务器,application.yml 的配置如下:
spring:
zipkin:
base-url: http://localhost:9411
sleuth:
sampler:
percentage: 1.0
在 application.yml 中,使用 spirng.zipkin.base-url 来配置 Zipkin 的服务器,使用 spring.zipkin.sleuth.sampler.percentage 来配置跨度数据的采样百份比,默认值为 0.1,也就是会向 Zipkin 发送约 10% 的跨度数据。本例中为了查看效果,直接配置为 1,也就是全部的跨度数据都会被发送到 Zipkin。在生产环境中,建议还是按照具体的需求进行抽样,以免增加服务器的负载。
为了能在各个微服务的控制台中看到 Sleuth 的输出,还需要为 3 个微服务配置日志级别,在 application.yml 中加入以下配置:
logging:
level:
root: INFO
org.springframework.cloud.sleuth: DEBUG
关于“Spring Cloud 中 Sleuth 如何整合 Zipkin”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。