SpringCloud Sleuth链路追踪

什么是SpringCloudSleuth?

Spring Cloud Sleuth提供了一套完整的服务跟踪的解决方案,在分布式系统中提供追踪解决方案并且兼容支持了zipkin。

官网

https://github.com/spring-cloud/spring-cloud-sleuth

Trace:类似于树结构的Span集合,表示一条调用链路,存在唯一标识

span:表示调用链路来源,通俗的理解span就是一次请求信息

一条链路通过Trace Id唯一标识,Span标识发起的请求信息,各span通过parent id 关联起来

SpringCloud从F版起已不需要自己构建Zipkin Server了,只需调用jar包即可

下载Zipkin并运行

https://dl.bintray.com/openzipkin/maven/io/zipkin/java/zipkin-server/

测试Zipkin是否启动成功

http://localhost:9411/zipkin/

SpringCloudSleuth案例

服务提供者

  1. 创建cloud-provider-payment8001

  2. 修改pom文件

      
            
            
                org.springframework.cloud
                spring-cloud-starter-zipkin
            
            
            
                org.springframework.cloud
                spring-cloud-starter-netflix-eureka-client
            
            
                com.atguigu.springcloud
                cloud-api-commons
                ${project.version}
            
            
                org.springframework.boot
                spring-boot-starter-web
            
            
                org.springframework.boot
                spring-boot-starter-actuator
            
            
                org.mybatis.spring.boot
                mybatis-spring-boot-starter
            
            
                com.alibaba
                druid-spring-boot-starter
                1.1.10
            
            
            
                mysql
                mysql-connector-java
            
            
            
                org.springframework.boot
                spring-boot-starter-jdbc
            
            
                org.springframework.boot
                spring-boot-devtools
                runtime
                true
            
            
                org.projectlombok
                lombok
                true
            
            
                org.springframework.boot
                spring-boot-starter-test
                test
            
        

  3. 新建application.yml文件

    server:
      port: 8001
    ​
    spring:
      application:
        name: cloud-payment-service
      zipkin:
        base-url: http://localhost:9411
      sleuth:
        sampler:
          #采样率值介于 0 到 1 之间,1 则表示全部采集
         probability: 1
      datasource:
        type: com.alibaba.druid.pool.DruidDataSource            # 当前数据源操作类型
        driver-class-name: org.gjt.mm.mysql.Driver              # mysql驱动包
        url: jdbc:mysql://localhost:3306/db2019?useUnicode=true&characterEncoding=utf-8&useSSL=false
        username: root
        password: 123456
    ​
    eureka:
      client:
        #表示是否将自己注册进EurekaServer默认为true。
        register-with-eureka: true
        #是否从EurekaServer抓取已有的注册信息,默认为true。单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡
        fetchRegistry: true
        service-url:
          #defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka  # 集群版
          defaultZone: http://localhost:7001/eureka  # 单机版
      instance:
        instance-id: payment8001
        #访问路径可以显示IP地址
        prefer-ip-address: true
        #Eureka客户端向服务端发送心跳的时间间隔,单位为秒(默认是30秒)
        lease-renewal-interval-in-seconds: 1
        #Eureka服务端在收到最后一次心跳后等待时间上限,单位为秒(默认是90秒),超时将剔除服务
        lease-expiration-duration-in-seconds: 2
    ​
    ​
    mybatis:
      mapperLocations: classpath:mapper/*.xml
      type-aliases-package: com.atguigu.springcloud.entities    # 所有Entity别名类所在包
    ​
    ​

  4. 创建业务类

    @GetMapping("/payment/zipkin")
    public String paymentZipkin()
    {
        return "hi ,i'am paymentzipkin server fall back,welcome to atguigu,O(∩_∩)O哈哈~";
    }

服务消费者(调用方)

  1. 创建cloud-consumer-order80

  2. 修改pom文件

     
            
                org.springframework.cloud
                spring-cloud-starter-netflix-ribbon
            
            
                org.springframework.cloud
                spring-cloud-starter-netflix-eureka-client
            
            
            
                org.springframework.cloud
                spring-cloud-starter-zipkin
            
            
                com.atguigu.springcloud
                cloud-api-commons
                ${project.version}
            
            
                org.springframework.boot
                spring-boot-starter-web
            
            
                org.springframework.boot
                spring-boot-starter-actuator
            
    ​
            
                org.springframework.boot
                spring-boot-devtools
                runtime
                true
            
            
                org.projectlombok
                lombok
                true
            
            
                org.springframework.boot
                spring-boot-starter-test
                test
            
        

  3. 新建application.yml文件

    server:
      port: 80
    ​
    spring:
        application:
            name: cloud-order-service
        zipkin:
          base-url: http://localhost:9411
        sleuth:
          sampler:
            probability: 1
    ​
    eureka:
      client:
        #表示是否将自己注册进EurekaServer默认为true。
        register-with-eureka: true
        #是否从EurekaServer抓取已有的注册信息,默认为true。单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡
        fetchRegistry: true
        service-url:
          #defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/
          defaultZone: http://eureka7001.com:7001/eureka
    ​
     
     
    ​

  4. 创建业务类

     
    // ====================> zipkin+sleuth
    @GetMapping("/consumer/payment/zipkin")
    public String paymentZipkin()
    {
        String result = restTemplate.getForObject("http://localhost:8001"+"/payment/zipkin/", String.class);
        return result;
    }
     

你可能感兴趣的:(spring,cloud,spring,后端)