Spring Cloud 学习笔记 ——Sleath、Zipkin、RabbitMQ、ElasticSearch、Stream 搭建链路项目

17.2 实践

在Spring Cloud 学习笔记 —— Spring Cloud Zipkin 简介和安装的基础上,我们创建一个项目,来在项目中实现 Sleath、Zipkin、RabbitMQ 的链路追踪

  • 1.创建一个 Spring Boot 项目 zipkin01,添加 Web、Sleath、Zipkin、RabbitMQ、Stream依赖,Stream 依赖是方便发送到消息队列
    Spring Cloud 学习笔记 ——Sleath、Zipkin、RabbitMQ、ElasticSearch、Stream 搭建链路项目_第1张图片
    创建完项目,配置 application.properties
spring.application.name=zipkin03
# 开启链路追踪
spring.sleuth.web.client.enabled=true
# 配置采用比例,默认是 0.1,这里方便测试改为 1,即 100%
spring.sleuth.sampler.probability=1
# 配置 zipkin 地址
spring.zipkin.base-url=http://192.168.99.100:9411
# 开启 zipkin
spring.zipkin.enabled=true
# 设置消息发送的类型
spring.zipkin.sender.type=rabbit

# rabbitmq 配置
spring.rabbitmq.host=192.168.99.100
spring.rabbitmq.port=32773
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

如上配置 ip 端口,参考 docker 中的显示:
Spring Cloud 学习笔记 ——Sleath、Zipkin、RabbitMQ、ElasticSearch、Stream 搭建链路项目_第2张图片
创建一个测试的 Controller

@RestController
public class HelloController {
    private static final Logger logger = LoggerFactory.getLogger(HelloController.class);
    @GetMapping("/hello")
    public String hello(String name){
        logger.info("zipkin03-hello");
        return "hello" + name;
    }
}
  • 2.创建一个跟 zipkin03 一样的项目 zipkin04
    依赖一样,配置 application.properties 中添加 server.port 属性和更改 spring.application.name 属性
spring.application.name=zipkin04
server.port=8081
# 开启链路追踪
spring.sleuth.web.client.enabled=true
# 配置采用比例,默认是 0.1,这里方便测试改为 1,即 100%
spring.sleuth.sampler.probability=1
# 配置 zipkin 地址
spring.zipkin.base-url=http://192.168.99.100:9411
# 开启 zipkin
spring.zipkin.enabled=true
# 设置消息发送的类型
spring.zipkin.sender.type=rabbit

# rabbitmq 配置
spring.rabbitmq.host=192.168.99.100
spring.rabbitmq.port=32773
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

然后这个基础上,在启动类上添加 RestTemplate 的 Bean

@SpringBootApplication
public class Zipkin04Application {

    public static void main(String[] args) {
        SpringApplication.run(Zipkin04Application.class, args);
    }

    @Bean
    RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

创建一个测试的 Controller

@RestController
public class HelloController {
    private static final Logger logger = LoggerFactory.getLogger(HelloController.class);
        
    @Autowired
    RestTemplate restTemplate;
    @GetMapping("/hello")
    public void hello(){

        String s = restTemplate.getForObject("http://localhost:8080/hello?name={1}", String.class, "javaboy");
        logger.info(s);
    }
}
  • 3.启动 zipkin03 和 zipkin04 然后访问 zipkin04 的 /hello 接口
    Spring Cloud 学习笔记 ——Sleath、Zipkin、RabbitMQ、ElasticSearch、Stream 搭建链路项目_第3张图片
    zipkin04的:链路[zipkin04,a1c7cc0516de881b,a1c7cc0516de881b]
    Spring Cloud 学习笔记 ——Sleath、Zipkin、RabbitMQ、ElasticSearch、Stream 搭建链路项目_第4张图片
    zipkin03的:[zipkin03,a1c7cc0516de881b,2d5a409c88c1dc13]
    [zipkin04,a1c7cc0516de881b,a1c7cc0516de881b]和[zipkin03,a1c7cc0516de881b,2d5a409c88c1dc13]就好像从前一个传递过来一样
    观察 zipkin 管理页面
    Spring Cloud 学习笔记 ——Sleath、Zipkin、RabbitMQ、ElasticSearch、Stream 搭建链路项目_第5张图片
    打开
    Spring Cloud 学习笔记 ——Sleath、Zipkin、RabbitMQ、ElasticSearch、Stream 搭建链路项目_第6张图片
    Span ID:a1c7cc0516de881b Parent ID:None
    Spring Cloud 学习笔记 ——Sleath、Zipkin、RabbitMQ、ElasticSearch、Stream 搭建链路项目_第7张图片
    Span ID:04dfe8955136bd89 Parent ID:a1c7cc0516de881b
    Spring Cloud 学习笔记 ——Sleath、Zipkin、RabbitMQ、ElasticSearch、Stream 搭建链路项目_第8张图片
    Span ID:2d5a409c88c1dc13 Parent ID:04dfe8955136bd89
    总计:
    Span ID:a1c7cc0516de881b Parent ID:None
    Span ID:04dfe8955136bd89 Parent ID:a1c7cc0516de881b
    Span ID:2d5a409c88c1dc13 Parent ID:04dfe8955136bd89
    可以看到其实有 3 个 spanId :
    第一个是请求进入 zipkon04 服务时;
    第二个是从 zipkin04 到 RestTemplate 调用产生的 ;
    第三个是从 RestTemplate 到 zipkon03 产生的;
    这就是 zipkin 展示链路的过程,跟 kibana 的功能类似;
  • 4.所展示的内容就是 es-head 中的数据内容
    Spring Cloud 学习笔记 ——Sleath、Zipkin、RabbitMQ、ElasticSearch、Stream 搭建链路项目_第9张图片
    还可以观看 RabbitMQ,它有一个队列就 zipkin
    Spring Cloud 学习笔记 ——Sleath、Zipkin、RabbitMQ、ElasticSearch、Stream 搭建链路项目_第10张图片
    这就是 Sleuth、zipkin、RabbitMQ、ElasticSearch 搭建的日志查看功能,首先 Sleuth 收集日志,发送给 RabbitMQ 队列,RabbitMQ 队列发送给 ElasticSearch 储存,然后 Zipkin 展示 ElasticSearch 中的内容,以人性化的可视页面显示调用链路过程

你可能感兴趣的:(Spring,Cloud,笔记,Spring,cloud,SC-Zipkin)