当前位置: 首页 > 知识库问答 >
问题:

springcloudsleuth与MySQL

薛飞星
2023-03-14

我很难找到任何合适的例子来演示如何找到跟踪并将其存储在本地MySQL数据库中。我使用zipkin服务器来可视化我对微服务的分布式跟踪。如果有人在最新版本中与gradle一起使用Spring Cloud Sleuth,请提交一个可以帮助我的完美示例。

这里'我的代码:

建筑格拉德尔

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()
}

应用性质

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数据库中存储跟踪,表的创建是正确的。但是记录是空的。我不知道为什么我认为我缺少任何配置。我按照本文的说明在DB中存储跟踪。有人能告诉我我错过了什么评估吗。

我的ZipkinUI看起来像

我的MySQL数据库

共有1个答案

唐睿
2023-03-14

请使用Spring Cloud Sleuth 3.1.0-SNAPSHOT(通过2021.0.0-SNAPSHOT系列,我们应该在6月的AFAIR中使用M1)。在这里你可以找到一个样品https://github.com/spring-cloud-samples/spring-cloud-sleuth-samples/tree/3.1.x/data(还记得这部分吗https://github.com/spring-cloud-samples/spring-cloud-sleuth-samples/blob/3.1.x/data/pom.xml#L33-L38)和文件https://docs.spring.io/spring-cloud-sleuth/docs/3.1.0-SNAPSHOT/reference/html/integrations.html#sleuth-jdbc集成。为方便起见,我复制了下面的代码

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example.sleuthsamples</groupId>
    <artifactId>data</artifactId>
    <version>1.0.0-SLEUTH</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.1</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <spring-cloud.version>2021.0.0-SNAPSHOT</spring-cloud.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>11</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!-- Either p6spy or datasource-proxy -->
        <dependency>
            <groupId>p6spy</groupId>
            <artifactId>p6spy</artifactId>
            <version>3.9.1</version>
            <scope>runtime</scope>
        </dependency>
        <!-- Either p6spy or datasource-proxy -->
        <!-- <dependency>
            <groupId>net.ttddyy</groupId>
            <artifactId>datasource-proxy</artifactId>
            <version>1.7</version>
            <scope>runtime</scope>
        </dependency> -->

                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-starter-sleuth</artifactId>
                </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <scope>import</scope>
                <type>pom</type>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <repositories>
        <repository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>https://repo.spring.io/snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>spring-releases</id>
            <name>Spring Releases</name>
            <url>https://repo.spring.io/release</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>https://repo.spring.io/snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </pluginRepository>
        <pluginRepository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </pluginRepository>
        <pluginRepository>
            <id>spring-plugin-snapshots</id>
            <name>Spring Snapshots</name>
            <url>https://repo.spring.io/snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </pluginRepository>
        <pluginRepository>
            <id>spring-plugin-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/release</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories>

</project>

如果你不想使用快照,你需要使用Brave的p6间谍支持https://github.com/openzipkin/brave/tree/master/instrumentation/p6spy。请添加io.zipkin.brave: brad-Instrenting-p6spy到类路径,并更改项目自述文件中的属性

 类似资料:
  • 问题内容: 在MySQL中使用文本字段还是使用文本字段更好? 为什么? 更新:我知道每个人都意味着什么。考虑到磁盘空间和性能,我对使用哪种更好的方法很感兴趣。 更新2:嘿ppl!问题是“使用什么更好”而不是“每种含义”或“如何检查它们” … 问题答案: 使用默认值。在SQL中,不同于空字符串(“”)。空字符串特别意味着该值设置为空。表示未设置该值或将其设置为null。您会看到不同的含义。 不同的含

  • 问题内容: 已关闭 。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗? 更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 编辑:我已经将Postgres与PostGIS一起使用了几个月,我很满意。 我需要分析几百万个地理编码的记录,每个记录都有经度和纬度。这些记录包含至少三种不同类型的数据,我将尝试查看每个集合是否会相互影响。 对于所有这些数据,哪个数据库最适合作为基

  • 问题内容: MySQL 和之间有什么区别? 问题答案: 对于此类问题,始终值得首先阅读手册。MySQL手册中的日期和时间函数 返回当前时间的DATE部分。CURDATE()手册 以各种格式返回日期和时间部分作为时间戳,具体取决于如何请求。NOW()手册。

  • 问题内容: 我刚刚开始接触Node.js。我来自PHP背景,因此我习惯于使用MySQL满足所有数据库需求。 如何在Node.js中使用MySQL? 问题答案: 查看node.js模块列表 node- mysql-实现MySQL协议的node.js模块 node-mysql2 —另一个纯JS异步驱动程序。流水线,准备好的语句。 node-mysql-libmysqlclient —基于libmysq

  • 问题内容: 所以这是我们所有人都应该知道的事情,当我第一次看到它时就在我脑海中浮现。 我知道该版本从5.3开始弃用,但的实际区别是什么。 我以为那是完全一样的,除了需要为mysql资源提供第二个参数。 因此,我当时很好地认为,字符串的处理方式一定有所不同,因为不需要2个函数。 因此,我当时认为区别完全在于语言环境和字符编码。? 谁能为我解决这个问题? 问题答案: 不同之处在于,仅将字符串视为原始字

  • 我正在创建一个类似Instagram的应用程序。我需要使用数据库,对吗?所以我选择了MYSQL,但我不知道如何托管数据库,以便所有用户都可以访问数据,以及如何将应用程序与数据库连接。我看了很多关于如何将数据库与应用程序连接的教程,但没有一个有用。所以你们能给我提供关于如何托管数据库的信息,以及一个连接数据库和应用程序的好例子吗。请