手记

【九月打卡】第19天 集成 SpringCloud Sleuth 实现微服务通信跟踪

课程名称:Spring Cloud / Alibaba 微服务架构实战

课程章节:第8章-集成 SpringCloud Sleuth 实现微服务通信跟踪

课程讲师:张勤一

课程内容:

1. 集成SpringCloud Sleuth

  1. 给需要实现链路跟踪的模块添加pom依赖

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-sleuth</artifactId>
    </dependency>
    

    第一原则:引入Sleuth前提是保证微服务存在跨进程通信,否则意义不大(可以通过更简单的方式实现)。

  • 引入依赖后,打印的日志会有些许变化。

2. 演示通过代码获取链路信息

  • Controller
package com.imooc.ecommerce.controller;

import com.imooc.ecommerce.service.SleuthTraceInfoService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * <h1>打印跟踪信息</h1>
 * */
@Slf4j
@RestController
@RequestMapping("/sleuth")
public class SleuthTraceInfoController {

    private final SleuthTraceInfoService traceInfoService;

    public SleuthTraceInfoController(SleuthTraceInfoService traceInfoService) {
        this.traceInfoService = traceInfoService;
    }

    /**
     * <h2>打印日志跟踪信息</h2>
     * */
    @GetMapping("/trace-info")
    public void logCurrentTraceInfo() {
        traceInfoService.logCurrentTraceInfo();
    }
}

Service

package com.imooc.ecommerce.service;

import brave.Tracer;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

/**
 * 使用代码更直观的看到 Sleuth 生成的相关跟踪信息
 * */
@Slf4j
@Service
public class SleuthTraceInfoService {

    /** brave.Tracer 跟踪对象 */
    private final Tracer tracer;

    public SleuthTraceInfoService(Tracer tracer) {
        this.tracer = tracer;
    }

    /**
     * <h2>打印当前的跟踪信息到日志中</h2>
     * */
    public void logCurrentTraceInfo() {

        log.info("Sleuth trace id: [{}]", tracer.currentSpan().context().traceId());
        log.info("Sleuth span id: [{}]", tracer.currentSpan().context().spanId());
    }
}

课程截图:372词

0人推荐
随时随地看视频
慕课网APP