一、简介
1、默认情况下,Spring Cloud Sleuth支持服务之间http请求的traceId的传递。如最为常见的Feign和RestTemplate等。不支持服务在dubbo调用之间传递,所以我们要扩展dubbo的
Filter。
2、使用brave-instrumentation-dubbo-rpc组件来扩展dubbo的Filter。
二、Zipkin安装
1、下载:zipkin-server-2.12.9-exec.jar
2、启动:start.sh,访问地址:http://localhost:9411/
nohup java -jar zipkin-server-2.12.9-exec.jar &
三、代码
1、父工程pom
<!-- sleuth + zipkin dubbo版 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
<dependency>
<groupId>io.zipkin.brave</groupId>
<artifactId>brave-instrumentation-dubbo-rpc</artifactId>
<exclusions>
<exclusion>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
</exclusion>
</exclusions>
<version>5.4.1</version>
</dependency>
2、在各服务的resources下创建META-INF目录,META-INF目录下创建dubbo目录,dubbo目录下创建org.apache.dubbo.rpc.Filter文件
# brave.dubbo.rpc.TracingFilter为brave-instrumentation-dubbo-rpc中的文件
traceFilter=brave.dubbo.rpc.TracingFilter
3、在各服务的yml文件中配置sleuth、zipkin 和 filter
#spring相关配置
spring:
...
zipkin:
enabled: true
# zipkin的访问地址
base-url: http://localhost:9411
messageTimeout: 5
sender:
#向http发送trace信息
type: web
sleuth:
sampler:
# 采样率设置为1,接受所有请求
probability: 1
dubbo:
...
# sleuth,traceFilter为org.apache.dubbo.rpc.Filter文件中的key
consumer:
filter: traceFilter
provider:
filter: traceFilter
4、访问下单接口:
订单服务日志:
2021-10-25 23:58:46.329 INFO [spring-cloud-cfl-order,,,] 1927 --- [atch_RMROLE_1_8] io.seata.rm.AbstractRMHandler : Branch commit result: PhaseTwo_Committed
2021-10-25 23:59:01.968 INFO [spring-cloud-cfl-order,185651e8b2fc9bc7,185651e8b2fc9bc7,true] 1927 --- [nio-8082-exec-1] c.cfl.order.controller.OrderController : OrderController -> save userId:1 productId:1 count:1
2021-10-25 23:59:02.223 INFO [spring-cloud-cfl-order,185651e8b2fc9bc7,185651e8b2fc9bc7,true] 1927 --- [nio-8082-exec-1] i.seata.tm.api.DefaultGlobalTransaction : Begin new global transaction [192.168.1.101:8091:2025744393]
2021-10-25 23:59:02.226 INFO [spring-cloud-cfl-order,185651e8b2fc9bc7,185651e8b2fc9bc7,true] 1927 --- [nio-8082-exec-1] c.c.order.service.impl.OrderServiceImpl : OrderServiceImpl -> insert 接收到1号商品的下单请求
2021-10-25 23:59:02.879 INFO [spring-cloud-cfl-order,185651e8b2fc9bc7,185651e8b2fc9bc7,true] 1927 --- [nio-8082-exec-1] c.c.order.service.impl.OrderServiceImpl : OrderServiceImpl -> insert 接收到1号商品的下单请求,接下来调用 #库存服务#,扣减库存
2021-10-25 23:59:04.079 INFO [spring-cloud-cfl-order,185651e8b2fc9bc7,185651e8b2fc9bc7,true] 1927 --- [nio-8082-exec-1] c.c.order.service.impl.OrderServiceImpl : OrderServiceImpl -> insert 接收到1号商品的下单请求,接下来调用 #账户服务#,扣减金额
2021-10-25 23:59:05.867 INFO [spring-cloud-cfl-order,185651e8b2fc9bc7,185651e8b2fc9bc7,true] 1927 --- [nio-8082-exec-1] i.seata.tm.api.DefaultGlobalTransaction : [192.168.1.101:8091:2025744393] commit status: Committed
2021-10-25 23:59:06.231 INFO [spring-cloud-cfl-order,,,] 1927 --- [atch_RMROLE_1_8] i.s.core.rpc.netty.RmMessageListener : onMessage:xid=192.168.1.101:8091:2025744393,
库存服务日志:
2021-10-25 23:58:36.514 INFO [spring-cloud-cfl-storage,,,] 1703 --- [atch_RMROLE_1_8] io.seata.rm.AbstractRMHandler : Branch commit result: PhaseTwo_Committed
2021-10-25 23:58:43.481 INFO [spring-cloud-cfl-storage,732cf4d5b9346a47,ba167a7960fa045a,true] 1703 --- [20881-thread-17] c.c.s.service.impl.StorageServiceImpl : StorageServiceImpl -> reduceStorage productId:1 number:1
2021-10-25 23:58:47.175 INFO [spring-cloud-cfl-storage,,,] 1703 --- [atch_RMROLE_1_8] i.s.core.rpc.netty.RmMessageListener : onMessage:xid=192.168.1.101:8091:2025744372,branchId=2025744380,branchType=AT,resourceId=jdbc:mysql://localhost:3306/seata_storage,applicationData=null
2021-10-25 23:58:47.191 INFO [spring-cloud-cfl-storage,,,] 1703 --- [atch_RMROLE_1_8] io.seata.rm.AbstractRMHandler : Branch committing: 192.168.1.101:8091:2025744372 2025744380 jdbc:mysql://localhost:3306/seata_storage null
2021-10-25 23:58:47.192 INFO [spring-cloud-cfl-storage,,,] 1703 --- [atch_RMROLE_1_8] io.seata.rm.AbstractRMHandler : Branch commit result: PhaseTwo_Committed
2021-10-25 23:58:47.447 INFO [spring-cloud-cfl-storage,,,] 1703 --- [atch_RMROLE_1_8] i.s.core.rpc.netty.RmMessageListener : onMessage:xid=192.168.1.101:8091:2025744372,branchId=2025744383,branchType=AT,resourceId=jdbc:mysql://localhost:3306/seata_storage,applicationData=null
2021-10-25 23:58:47.447 INFO [spring-cloud-cfl-storage,,,] 1703 --- [atch_RMROLE_1_8] io.seata.rm.AbstractRMHandler : Branch committing: 192.168.1.101:8091:2025744372 2025744383 jdbc:mysql://localhost:3306/seata_storage null
2021-10-25 23:58:47.447 INFO [spring-cloud-cfl-storage,,,] 1703 --- [atch_RMROLE_1_8] io.seata.rm.AbstractRMHandler : Branch commit result: PhaseTwo_Committed
2021-10-25 23:59:02.953 INFO [spring-cloud-cfl-storage,185651e8b2fc9bc7,76d3d6c687bbacaa,true] 1703 --- [20881-thread-18] c.c.s.service.impl.StorageServiceImpl : StorageServiceImpl -> reduceStorage productId:1 number:1
2021-10-25 23:59:06.418 INFO [spring-cloud-cfl-storage,,,] 1703 --- [atch_RMROLE_1_8] i.s.core.rpc.netty.RmMessageListener : onMessage:xid=192.168.1.101:8091:2025744393,branchId=2025744400,branchType=AT,resourceId=jdbc:mysql://localhost:3306/seata_storage,applicationData=null
账户服务日志:
2021-10-25 23:58:47.775 INFO [spring-cloud-cfl-account,,,] 1618 --- [atch_RMROLE_1_8] io.seata.rm.AbstractRMHandler : Branch commit result: PhaseTwo_Committed
2021-10-25 23:59:04.161 INFO [spring-cloud-cfl-account,185651e8b2fc9bc7,d7649b9531007d8f,true] 1618 --- [20880-thread-16] c.c.a.service.impl.AccountServiceImpl : AccountServiceImpl -> reduceBalance userId:1 number:100
2021-10-25 23:59:06.591 INFO [spring-cloud-cfl-account,,,] 1618 --- [atch_RMROLE_1_8] i.s.core.rpc.netty.RmMessageListener : onMessage:xid=192.168.1.101:8091:2025744393,branchId=2025744405,branchType=AT,resourceId=jdbc:mysql://localhost:3306/seata_account,applicationData=null
- 三个服务的traceId都是185651e8b2fc9bc7
- 订单服务的spanId为185651e8b2fc9bc7,库存服务的spanId为ba167a7960fa045a,账户服务的spanId为d7649b9531007d8f,三个服务的spanId各不相同。