文章目录 1.新增sunrays-common-cloud模块 1.在sunrays-framework下创建 2.pom.xml 3.查看是否被sunrays-framework管理 2.创建common-cloud-sleuth-starter 1.目录结构 2.pom.xml 3.sunrays-dependencies指定cloud版本 4.SleuthAutoConfiguration.java 5.spring.factories 3.创建common-cloud-sleuth-starter-demo 1.目录结构 2.pom.xml 3.ServiceB 1.application.yml 开启sleuth并指定服务名和端口 2.ResponseToA.java 给服务A响应数据 3.ServiceBApplication.java 启动类 4.ServiceA 1.application.yml 开启sleuth并指定服务名和端口 2.ServiceBClient.java 暴露服务B的接口 3.RequestToB.java 向B服务发起请求 4.ServiceAApplication.java ServiceA启动类,开启Feign 5.common-log4j2-starter 1.log4j2-spring.xml中读取traceId和spanId 2.测试发送请求 1.ServiceA 2.ServiceB 3.即使是微服务之间的请求,他们的traceid也是一样的
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> < 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> < 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 ;
@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> < dependency> < groupId> com.sunxiansheng</ groupId> < artifactId> common-cloud-sleuth-starter</ artifactId> < version> 1.0.5</ version> </ dependency> < dependency> < groupId> org.springframework.cloud</ groupId> < artifactId> spring-cloud-starter-openfeign</ artifactId> </ dependency> < dependency> < groupId> org.springframework.boot</ groupId> < artifactId> spring-boot-starter-web</ artifactId> < 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 ;
@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 ; @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 ;
@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 ;
@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 ;
@SpringBootApplication
@EnableFeignClients
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{[%X{traceId}]}{cyan} %style{[%X{spanId}]}{cyan} %style{%logger{36}}{cyan} - %msg%n%throwable</ Property>
2.测试发送请求
1.ServiceA
2.ServiceB
3.即使是微服务之间的请求,他们的traceid也是一样的