【发布时间】:2021-09-06 23:14:33
【问题描述】:
我一直在寻找任何合适的示例来证明我可以找出跟踪并将其存储在本地 MySQL 数据库中。 我使用 zipkin 服务器来可视化我对微服务的分布式跟踪。 如果有人在最新版本的 gradle 中使用 Spring Cloud Sleuth,请交出可以帮助我的完美示例。
这是我的代码:
build.gradle
plugins {
id 'org.springframework.boot' version '2.2.6.RELEASE'
id 'io.spring.dependency-management' version '1.0.9.RELEASE'
id 'java'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
ext {
set('springCloudVersion', "Hoxton.SR4")
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.cloud:spring-cloud-starter-sleuth'
implementation 'org.springframework.cloud:spring-cloud-sleuth-zipkin'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
implementation group: 'mysql', name: 'mysql-connector-java', version: '8.0.16'
// https://mvnrepository.com/artifact/io.zipkin.zipkin2/zipkin-storage-mysql-v1
implementation group: 'io.zipkin.zipkin2', name: 'zipkin-storage-mysql-v1', version: '2.23.2'
// https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-jdbc
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-jdbc', version: '2.5.0'
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}
test {
useJUnitPlatform()
}
application.properties
server.port=8083
spring.application.name=service1
#logging.level.org.springframework.web.servlet.DispatcherServlet=DEBUG
spring.sleuth.sampler.percentage=1.0
spring.zipkin.enabled=true
spring.zipkin.base-url=http://localhost:9411/
spring.sleuth.enabled=true
spring.zipkin.storage.type=mysql
spring.datasource.url=jdbc:mysql://localhost:3306/zipkin
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.schema=classpath:mysql.sql
spring.datasource.initialization-mode=always
spring.jpa.show-sql=true
spring.sleuth.web.enabled=true
spring.zipkin.sender.type=web
控制器类
@RestController
@Slf4j
@RequiredArgsConstructor
public class SpaceShipRestController {
private final RestTemplate restTemplate;
@GetMapping("/service1")
public String service1() {
log.info("service1 start");
String service2 = restTemplate.getForObject("http://localhost:8090/service2", String.class);
String service3 = restTemplate.getForObject("http://localhost:9090/service3", String.class);
log.info("call" + service2 + "and" + service3);
return "calling service2";
}
}
应用程序类
@SpringBootApplication
@EnableAutoConfiguration
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
@Bean
@Primary
public MySQLStorage mySQLStorage(DataSource datasource) {
return MySQLStorage.newBuilder().datasource(datasource).executor(Runnable::run).build();
}
}
我已使用 zipkin-server-2.23.2-exec jar 在端口 localhost:9411 作为默认端口启动服务器 在 cmd 上使用此命令。 java -jar zipkin-server-2.23.2-exec
我的 zipkin 已启动并且工作正常,我只是被困在我的 MySQL 数据库中存储跟踪,这些表正在正确创建。但是记录是空的。 我不知道为什么我认为我缺少任何配置。 我关注了this 文章,因为他们显示将跟踪存储在数据库中。 任何人都可以建议我在哪里进行评估。
【问题讨论】:
标签: spring-boot microservices spring-cloud spring-cloud-sleuth zipkin