集成Sleuth实现链路追踪
文章目录
1.新增sunrays-common-cloud模块
1.在sunrays-framework下创建
2.pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.sunxiansheng</groupId>
<artifactId>sunrays-dependencies</artifactId>
<version>1.0.5</version>
<!-- 当要继承的模块不是目录中的当前模块的父模块时使用 -->
<relativePath/>
</parent>
<version>1.0.5</version>
<artifactId>sunrays-common-cloud</artifactId>
</project>
3.查看是否被sunrays-framework管理
2.创建common-cloud-sleuth-starter
1.目录结构
2.pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.sunxiansheng</groupId>
<artifactId>sunrays-common-cloud</artifactId>
<version>1.0.5</version>
</parent>
<version>1.0.5</version>
<artifactId>common-cloud-sleuth-starter</artifactId>
<dependencies>
<!-- spring-cloud-starter-sleuth -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
</dependencies>
</project>
3.sunrays-dependencies指定cloud版本
<spring-cloud.version>2020.0.1</spring-cloud.version>
<!-- Spring Cloud -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
4.SleuthAutoConfiguration.java
package com.sunxiansheng.sleuth.config;
import org.springframework.context.annotation.Configuration;
/**
* Description: Sleuth自动配置类
*
* @Author sun
* @Create 2025/1/1 11:03
* @Version 1.0
*/
@Configuration
public class SleuthAutoConfiguration {
}
5.spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.sunxiansheng.sleuth.config.SleuthAutoConfiguration
3.创建common-cloud-sleuth-starter-demo
1.目录结构
2.pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.sunxiansheng</groupId>
<artifactId>sunrays-demo</artifactId>
<version>1.0.5</version>
</parent>
<version>1.0.5</version>
<artifactId>common-cloud-sleuth-starter-demo</artifactId>
<packaging>pom</packaging>
<modules>
<module>ServiceA</module>
<module>ServiceB</module>
</modules>
<dependencies>
<!-- 引入common-cloud-sleuth-starter -->
<dependency>
<groupId>com.sunxiansheng</groupId>
<artifactId>common-cloud-sleuth-starter</artifactId>
<version>1.0.5</version>
</dependency>
<!-- OpenFeign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- 引入springboot-web模块 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 排除logging,防止日志冲突 -->
<exclusions>
<exclusion>
<artifactId>spring-boot-starter-logging</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.sunxiansheng</groupId>
<artifactId>common-log4j2-starter</artifactId>
<version>1.0.5</version>
</dependency>
</dependencies>
</project>
3.ServiceB
1.application.yml 开启sleuth并指定服务名和端口
spring:
sleuth:
enabled: true
sampler:
probability: 1.0
application:
name: ServiceB
server:
port: 9092
2.ResponseToA.java 给服务A响应数据
package com.sunxiansheng;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* Description: 给服务A响应数据
*
* @Author sun
* @Create 2025/1/1 10:54
* @Version 1.0
*/
@RestController
public class ResponseToA {
@RequestMapping("/responseToA")
public String responseToA() {
return "responseToA";
}
}
3.ServiceBApplication.java 启动类
package com.sunxiansheng;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* Description: ServiceB启动类
*
* @Author sun
* @Create 2025/1/1 10:50
* @Version 1.0
*/
@SpringBootApplication
public class ServiceBApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceBApplication.class, args);
}
}
4.ServiceA
1.application.yml 开启sleuth并指定服务名和端口
spring:
sleuth:
enabled: true
sampler:
probability: 1.0
application:
name: ServiceA
server:
port: 9091
2.ServiceBClient.java 暴露服务B的接口
package com.sunxiansheng;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* Description: ServiceBClient
*
* @Author sun
* @Create 2025/1/1 10:43
* @Version 1.0
*/
@FeignClient(name = "ServiceB", url = "http://localhost:9092")
public interface ServiceBClient {
@RequestMapping("/responseToA")
String responseToA();
}
3.RequestToB.java 向B服务发起请求
package com.sunxiansheng;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* Description: 向B服务发起请求
*
* @Author sun
* @Create 2025/1/1 10:53
* @Version 1.0
*/
@RestController
public class RequestToB {
@Resource
private ServiceBClient serviceBClient;
@RequestMapping("/requestToB")
public String requestToB() {
return serviceBClient.responseToA();
}
}
4.ServiceAApplication.java ServiceA启动类,开启Feign
package com.sunxiansheng;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;
/**
* Description: ServiceA启动类
*
* @Author sun
* @Create 2025/1/1 10:50
* @Version 1.0
*/
@SpringBootApplication
@EnableFeignClients // 开启Feign
public class ServiceAApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceAApplication.class, args);
}
}
5.common-log4j2-starter
1.log4j2-spring.xml中读取traceId和spanId
<!-- 控制台日志输出格式,带颜色 -->
<Property name="CONSOLE_LOG_PATTERN">
<!-- %style{%d{yyyy-MM-dd HH:mm:ss.SSS}}{green} %style{[%t]}{blue} %highlight{%p}{FATAL=red blink, ERROR=red, WARN=yellow, INFO=green, DEBUG=cyan, TRACE=magenta} %style{[PFTID:%X{PFTID}]}{magenta} %style{[Module:${sys:log.module}]}{yellow} %style{%logger{36}}{cyan} - %msg%n%throwable -->
%style{%d{yyyy-MM-dd HH:mm:ss.SSS}}{green} %style{[%t]}{blue} %highlight{%p}{FATAL=red blink, ERROR=red, WARN=yellow, INFO=green, DEBUG=cyan, TRACE=magenta} %style{[PFTID:%X{PFTID}]}{magenta} %style{[Module:${sys:log.module}]}{yellow} %style{[%X{traceId}]}{cyan} %style{[%X{spanId}]}{cyan} %style{%logger{36}}{cyan} - %msg%n%throwable
</Property>
2.测试发送请求
1.ServiceA
2.ServiceB
3.即使是微服务之间的请求,他们的traceid也是一样的
原文地址:https://blog.csdn.net/m0_64637029/article/details/145316254
免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!