前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >spring-cloud-sleuth源码学习一

spring-cloud-sleuth源码学习一

原创
作者头像
eeaters
修改2021-10-11 18:06:59
9150
修改2021-10-11 18:06:59
举报
文章被收录于专栏:阿杰阿杰

文章分三部分:

- spring-cloud-sleuth快速上手

- zipkin-brave的demo及源码(https://cloud.tencent.com/developer/article/1884429)

- spring-cloud-sleuth源码(https://cloud.tencent.com/developer/article/1886833)

spring-cloud-sleuth整合zipkin的quickstart

在之前工作中,接手到一个项目日志没有规范,问题还贼多的项目, 为了更方便的查询日志 ,当时花费了一点时间通过MDC来将日志进行了链路跟踪 ; 同步请求/异步请求都可以做到一个traceId查询到整条链路, 做完之后对于查询问题提供了不小的帮助 ;

代码语言:txt
复制
现在回头看一下,如果当时使用spring-cloud-sleuth的话,当时的痛点可以轻松的搞定.并且还做的更好. 所以对sleuth的源码进行了简单的阅读,同时为了看sleuth的源码,先看了下zipkin的源码

zipkin

官方网站

github地址

本地启动

  • 网上贴出的地址都提示forbidden,因此手动动手
  • 在github中clone项目
  • 在zipkin父目录中打包: maven clean install -Dmaven.skip.test=true
  • java -jar zipkin-server/target/zipkin-server-2.23.5-SNAPSHOT-exec.jar
代码语言:txt
复制
$ java -jar zipkin-server-2.23.5-SNAPSHOT-exec.jar

                  oo
                 oooo
                oooooo
               oooooooo
              oooooooooo
             oooooooooooo
           ooooooo  ooooooo
          oooooo     ooooooo
         oooooo       ooooooo
        oooooo   o  o   oooooo
       oooooo   oo  oo   oooooo
     ooooooo  oooo  oooo  ooooooo
    oooooo   ooooo  ooooo  ooooooo
   oooooo   oooooo  oooooo  ooooooo
  oooooooo      oo  oo      oooooooo
  ooooooooooooo oo  oo ooooooooooooo
      oooooooooooo  oooooooooooo
          oooooooo  oooooooo
              oooo  oooo

     ________ ____  _  _____ _   _
    |__  /_ _|  _ \| |/ /_ _| \ | |
      / / | || |_) | ' / | ||  \| |
     / /_ | ||  __/| . \ | || |\  |
    |____|___|_|   |_|\_\___|_| \_|

:: version 2.23.5-SNAPSHOT :: commit a90d287 ::

2021-09-27 10:05:31.331  INFO [/] 5712 --- [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/

sleuth整合zipkin

同步链路追踪

jar包依赖

如果使用链路最终,数据不需要提交到zipkin中,引入spring-cloud-starter-sleuthjar包; 如果需要将数据提交至zipkin进行收集,直接引入spring-cloud-starter-zipkinjar包,里面包含了前面的jar包

代码语言:txt
复制
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zipkin</artifactId>
    <version>2.2.8.RELEASE</version>
</dependency>

配置

代码语言:txt
复制
spring:
  application:
    name: data
logging:
  level:
    org:
      springframework:
        web:
          servlet:
            DispatcherServlet: DEBUG
server:
  port: 9000

如果需要调整zipkin地址,在配置文件中调整spring.zipkin.base-url对应上zipkin地址即可

测试代码

贴两个服务之间进行分布式调用来进行测试

  • 服务1
代码语言:txt
复制
    @Autowired
    DataFeign dataFeign;

    @GetMapping("/echo")
    public ResponseEntity<String> echo(@RequestParam String message) {
        logger.info("echo: " + message);
        return dataFeign.echo(message);
    }
  • 服务2
代码语言:txt
复制
    @GetMapping("/echo")
    public ResponseEntity<String> echo(@RequestParam("message") String message) {
        logger.info("echo: " + message);
        return ResponseEntity.ok("[ECHO] : " + message);
    }

zipkin检测效果

异步链路追踪

jar依赖

额外增加mq的依赖

代码语言:txt
复制
<dependency>
    <groupId>org.springframework.amqp</groupId>
    <artifactId>spring-rabbit</artifactId>
</dependency>

配置

代码语言:txt
复制
server:
  port: 9002
spring:
  application:
    name: rabbit

测试代码

发送端

代码语言:txt
复制
@RestController
public class TestController {  
    @Autowired
    RabbitTemplate rabbitTemplate;
    private static Logger logger = LoggerFactory.getLogger(TestController.class);

    @GetMapping("/echo")
    public void echo(@RequestParam String message) {
        logger.info("[echo] : " + message);
        rabbitTemplate.convertAndSend(Constant.TEST_EXCHANGE_NAME, Constant.TEST_ROUTING_NAME, message);
    }    
}

接受端

代码语言:txt
复制
public class TestConsumer {
    private static Logger logger = LoggerFactory.getLogger(TestConsumer.class);
    
    @RabbitListener(queues = Constant.TEST_QUEUE_NAME)
    public void handle(String message) {
        logger.info("[consumer] : " + message);
    }

    @Autowired
    RabbitAdmin rabbitAdmin;
    @PostConstruct
    public void postConstruct() {
        Queue queue = new Queue(Constant.TEST_QUEUE_NAME);
        Exchange exchange = new DirectExchange(Constant.TEST_EXCHANGE_NAME);
        rabbitAdmin.declareQueue(queue);
        rabbitAdmin.declareExchange(exchange);
        rabbitAdmin.declareBinding(BindingBuilder.bind(queue)
                .to(exchange)
                .with(Constant.TEST_ROUTING_NAME)
                .noargs());
    }
}

测试结果

  • http://localhost:9002/echo?message=abc
代码语言:txt
复制
2021-09-28 10:46:42.125  INFO [rabbit,67a199e903810c9a,67a199e903810c9a] 3124 --- [nio-9002-exec-1] c.c.study.controller.TestController      : [echo] : abc
2021-09-28 10:46:42.203  INFO [rabbit,67a199e903810c9a,aeea7a2be1111551] 3124 --- [ntContainer#0-1] com.caicai.study.consumer.TestConsumer   : [consumer] : abc

zipkin效果

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章分三部分:
  • spring-cloud-sleuth整合zipkin的quickstart
  • zipkin
    • 官方网站
      • github地址
        • 本地启动
        • sleuth整合zipkin
          • 同步链路追踪
            • jar包依赖
            • 配置
            • 测试代码
            • zipkin检测效果
          • 异步链路追踪
            • jar依赖
            • 配置
            • 测试代码
            • 测试结果
            • zipkin效果
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档