本文节选自《疯狂Spring Cloud微服务架构实战》html
京东购买地址:https://item.jd.com/12256011.htmljava
当当网购买地址:http://product.dangdang.com/25201393.htmlgit
Spring Cloud教学视频:https://my.oschina.net/JavaLaw/blog/1552993spring
Spring Cloud电子书:https://my.oschina.net/JavaLaw/blog/1570383服务器
接下来,用Sleuth整合Zipkin,将微服务产生的日志,交给Zipkin去分析。架构
Zipkin是一个分布式的跟踪系统,主要用于收集、管理微服务所产生的数据。Zipkin的设计基于Google Dapper。在实际应用时,咱们须要让各个微服务,向Zipkin服务器报告过程数据。对于Spring Cloud来讲,已经提供了几个模块来实现数据报告功能,咱们仅须要加入依赖,以及作简单配置,便可实现向Zipkin“写入”数据。app
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个微服务模块:图书、支付、销售。几个模块提供了如下服务:
代码清单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微服务架构实战》
Spring Cloud教学视频:https://my.oschina.net/JavaLaw/blog/1552993
Spring Cloud电子书:https://my.oschina.net/JavaLaw/blog/1570383
本书代码共享地址:https://gitee.com/yangenxiong/SpringCloud