视频链接:2020最新版SpringCloud框架开发教程-周阳
文章源码:https://github.com/geyiwei-suzhou/cloud2020/
在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的服务节点调用来协同产生最后的请求结果,每一个前段请求都会形成一条复杂的分布式服务调用链路,链路中的任何一环出现高延时或错误都会引起整个请求最后的失败
Spring Cloud Sleuth 提供了一套完整的服务跟踪的解决方案,在分布式系统中提供追踪解决方案并且兼容支持了zipkin
zipkin
Spring Cloud从F版起已不需要自己构建Zipkin Server了,只需调用jar包即可
zipkin下载地址:zipkin-server-2.12.9-exec.jar
下载完成后使用如下命令运行:
java -jar zipkin-server-2.12.9-exec.jar
➜ Desktop java -jar zipkin-server-2.12.9-exec.jar
********
** **
* *
** **
** **
** **
** **
********
****
****
**** ****
****** **** ***
****************************************************************************
******* **** ***
**** ****
**
**
***** ** ***** ** ** ** ** **
** ** ** * *** ** **** **
** ** ***** **** ** ** ***
****** ** ** ** ** ** ** **
:: Powered by Spring Boot :: (v2.1.4.RELEASE)
2021-01-12 17:34:18.101 INFO 9790 --- [ main] z.s.ZipkinServer : Starting ZipkinServer on MacBook-Pro.local with PID 9790 (/Users/geyiwei/Desktop/zipkin-server-2.12.9-exec.jar started by geyiwei in /Users/geyiwei/Desktop)
2021-01-12 17:34:18.107 INFO 9790 --- [ main] z.s.ZipkinServer : The following profiles are active: shared
2021-01-12 17:34:19.620 INFO 9790 --- [ main] c.l.a.c.Flags : com.linecorp.armeria.verboseExceptions: false (default)
2021-01-12 17:34:19.620 INFO 9790 --- [ main] c.l.a.c.Flags : com.linecorp.armeria.verboseSocketExceptions: false (default)
2021-01-12 17:34:19.620 INFO 9790 --- [ main] c.l.a.c.Flags : com.linecorp.armeria.verboseResponses: false (default)
2021-01-12 17:34:19.625 INFO 9790 --- [ main] c.l.a.c.Flags : com.linecorp.armeria.useEpoll: false (default)
2021-01-12 17:34:22.987 INFO 9790 --- [ main] c.l.a.c.Flags : com.linecorp.armeria.useOpenSsl: true (default)
2021-01-12 17:34:22.987 INFO 9790 --- [ main] c.l.a.c.Flags : com.linecorp.armeria.maxNumConnections: 2147483647 (default)
2021-01-12 17:34:22.988 INFO 9790 --- [ main] c.l.a.c.Flags : com.linecorp.armeria.numCommonWorkers: 16 (default)
2021-01-12 17:34:22.988 INFO 9790 --- [ main] c.l.a.c.Flags : com.linecorp.armeria.numCommonBlockingTaskThreads: 200 (default)
2021-01-12 17:34:22.989 INFO 9790 --- [ main] c.l.a.c.Flags : com.linecorp.armeria.defaultMaxRequestLength: 10485760 (default)
2021-01-12 17:34:22.990 INFO 9790 --- [ main] c.l.a.c.Flags : com.linecorp.armeria.defaultMaxResponseLength: 10485760 (default)
2021-01-12 17:34:22.990 INFO 9790 --- [ main] c.l.a.c.Flags : com.linecorp.armeria.defaultRequestTimeoutMillis: 10000 (default)
2021-01-12 17:34:22.990 INFO 9790 --- [ main] c.l.a.c.Flags : com.linecorp.armeria.defaultResponseTimeoutMillis: 15000 (default)
2021-01-12 17:34:22.990 INFO 9790 --- [ main] c.l.a.c.Flags : com.linecorp.armeria.defaultConnectTimeoutMillis: 3200 (default)
2021-01-12 17:34:22.991 INFO 9790 --- [ main] c.l.a.c.Flags : com.linecorp.armeria.defaultServerIdleTimeoutMillis: 15000 (default)
2021-01-12 17:34:22.991 INFO 9790 --- [ main] c.l.a.c.Flags : com.linecorp.armeria.defaultClientIdleTimeoutMillis: 10000 (default)
2021-01-12 17:34:22.991 INFO 9790 --- [ main] c.l.a.c.Flags : com.linecorp.armeria.defaultHttp2InitialConnectionWindowSize: 1048576 (default)
2021-01-12 17:34:22.992 INFO 9790 --- [ main] c.l.a.c.Flags : com.linecorp.armeria.defaultHttp2InitialStreamWindowSize: 1048576 (default)
2021-01-12 17:34:22.992 INFO 9790 --- [ main] c.l.a.c.Flags : com.linecorp.armeria.defaultHttp2MaxFrameSize: 16384 (default)
2021-01-12 17:34:22.992 INFO 9790 --- [ main] c.l.a.c.Flags : com.linecorp.armeria.defaultHttp2MaxStreamsPerConnection: 2147483647 (default)
2021-01-12 17:34:22.992 INFO 9790 --- [ main] c.l.a.c.Flags : com.linecorp.armeria.defaultHttp2MaxHeaderListSize: 8192 (default)
2021-01-12 17:34:22.993 INFO 9790 --- [ main] c.l.a.c.Flags : com.linecorp.armeria.defaultHttp1MaxInitialLineLength: 4096 (default)
2021-01-12 17:34:22.993 INFO 9790 --- [ main] c.l.a.c.Flags : com.linecorp.armeria.defaultHttp1MaxHeaderSize: 8192 (default)
2021-01-12 17:34:22.993 INFO 9790 --- [ main] c.l.a.c.Flags : com.linecorp.armeria.defaultHttp1MaxChunkSize: 8192 (default)
2021-01-12 17:34:22.994 INFO 9790 --- [ main] c.l.a.c.Flags : com.linecorp.armeria.defaultUseHttp2Preface: true (default)
2021-01-12 17:34:22.994 INFO 9790 --- [ main] c.l.a.c.Flags : com.linecorp.armeria.defaultUseHttp1Pipelining: false (default)
2021-01-12 17:34:22.994 INFO 9790 --- [ main] c.l.a.c.Flags : com.linecorp.armeria.defaultBackoffSpec: exponential=200:10000,jitter=0.2 (default)
2021-01-12 17:34:22.994 INFO 9790 --- [ main] c.l.a.c.Flags : com.linecorp.armeria.defaultMaxTotalAttempts: 10 (default)
2021-01-12 17:34:22.995 INFO 9790 --- [ main] c.l.a.c.Flags : com.linecorp.armeria.routeCache: maximumSize=4096 (default)
2021-01-12 17:34:22.995 INFO 9790 --- [ main] c.l.a.c.Flags : com.linecorp.armeria.compositeServiceCache: maximumSize=256 (default)
2021-01-12 17:34:22.995 INFO 9790 --- [ main] c.l.a.c.Flags : com.linecorp.armeria.parsedPathCache: maximumSize=4096 (default)
2021-01-12 17:34:22.995 INFO 9790 --- [ main] c.l.a.c.Flags : com.linecorp.armeria.headerValueCache: maximumSize=4096 (default)
2021-01-12 17:34:22.995 INFO 9790 --- [ main] c.l.a.c.Flags : com.linecorp.armeria.cachedHeaders: :authority,:scheme,:method,accept-encoding,content-type (default)
2021-01-12 17:34:22.997 INFO 9790 --- [ main] c.l.a.c.Flags : com.linecorp.armeria.annotatedServiceExceptionVerbosity: unhandled (default)
2021-01-12 17:34:22.999 INFO 9790 --- [ main] c.l.a.c.Flags : /dev/epoll not available: java.lang.IllegalStateException: Only supported on Linux
2021-01-12 17:34:22.999 INFO 9790 --- [ main] c.l.a.c.Flags : Using OpenSSL: BoringSSL, 0x1010007f
2021-01-12 17:34:23.246 INFO 9790 --- [ main] c.l.a.c.u.SystemInfo : Hostname: macbook-pro.local (from 'hostname' command)
2021-01-12 17:34:23.770 INFO 9790 --- [oss-http-*:9411] c.l.a.s.Server : Serving HTTP at /0:0:0:0:0:0:0:0:9411 - http://127.0.0.1:9411/
2021-01-12 17:34:23.771 INFO 9790 --- [ main] c.l.a.s.ArmeriaAutoConfiguration : Armeria server started at ports: {/0:0:0:0:0:0:0:0:9411=ServerPort(/0:0:0:0:0:0:0:0:9411, [http])}
2021-01-12 17:34:23.811 INFO 9790 --- [ main] c.d.d.core : DataStax Java driver 3.7.1 for Apache Cassandra
2021-01-12 17:34:23.829 INFO 9790 --- [ main] c.d.d.c.GuavaCompatibility : Detected Guava >= 19 in the classpath, using modern compatibility layer
2021-01-12 17:34:24.308 INFO 9790 --- [ main] c.d.d.c.ClockFactory : Using native clock to generate timestamps.
2021-01-12 17:34:24.467 INFO 9790 --- [ main] z.s.ZipkinServer : Started ZipkinServer in 6.918 seconds (JVM running for 7.776)
访问:http://localhost:9411/zipkin
Trace Id:一个请求链路,通过Trace Id唯一标识,Span标识发起的请求信息,各span通过parent id关联起来
Trace:类似于树结构的Span集合,表示一条调用链路,存在唯一标识
span:表示调用链路来源,通俗的理解span就是一次请求信息
Sleuth链路追踪搭建
cloud-provider-payment8001模块
修改pom,添加zipkin依赖
<!-- 包含了sleuth + zipkin -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
修改yml,在spring节点下添加子节点:
zipkin:
base-url: http://localhost:9411
sleuth:
sampler:
# 采样率值介于0到1之间,1则表示全部采集
probability: 1
修改类:com.antherd.springcloud.controller.PaymentController,添加新接口
@GetMapping(value = "/payment/zipkin")
public String getPaymentZipkin() {
return "Hi, I'm payment zipkin server fall back, welcome to antherd, O(∩_∩)O哈哈~";
}
cloud-consumer-order80模块
修改pom,添加zipkin依赖
<!-- 包含了sleuth + zipkin -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
修改yml,在spring节点下添加子节点:
zipkin:
base-url: http://localhost:9411
sleuth:
sampler:
# 采样率值介于0到1之间,1则表示全部采集
probability: 1
修改类:com.antherd.springcloud.controller.OrderController,添加新接口
// ==================> zipkin + sleuth
@GetMapping(value = "/consumer/payment/zipkin")
public String getPaymentZipkin() {
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/ 网页,查找
点击某一条记录进入查看详情