无法在多线程环境中关闭跨度

问题描述 投票:0回答:1

我想跨越多个线程传递跨度并希望获得跟踪。我有不同的工作线程。

在跑步的同时我得到了You may have forgotten to close or detach null

pom.hml

<?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>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.19.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.sleuth.thread.example</groupId>
    <artifactId>demo-zipking</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo-zipking</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Edgware.SR5</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>io.zipkin.java</groupId>
            <artifactId>zipkin-server</artifactId>
        </dependency>
        <dependency>
            <groupId>io.zipkin.java</groupId>
            <artifactId>zipkin-autoconfigure-ui</artifactId>
            <scope>runtime</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

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

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

</project>

workers盘1.Java

@Slf4j
@RequiredArgsConstructor
public class WorkerSpan1 implements Runnable {

    private final CountDownLatch latch;
    private final Span span;
    private final Tracer tracer;

    @Override
    public void run() {
        latch.countDown();
        log.info("I am Worker 1 working");
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        tracer.close(span);
    }
}

workers盘2.Java

@Slf4j
@RequiredArgsConstructor
public class WorkerSpan2 implements Runnable {

    private final CountDownLatch latch;
    private final Span span;
    private final Tracer tracer;

    @Override
    public void run() {
        latch.countDown();
        log.info("I am Worker 2 working");
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        tracer.close(span);
    }
}

这里我传递span因为tracer.getCurrentSpan()返回null。

和我的控制器

test controller.Java

@RestController
@Slf4j
@RequiredArgsConstructor
public class TestController {

    private final Tracer tracer;


    @GetMapping("/")
    public String getDifferentThread2() throws InterruptedException {

        CountDownLatch latch = new CountDownLatch(2);
        Span span1 = next("WorkerSpan1");
        WorkerSpan1 worker1 = new WorkerSpan1(latch, span1, tracer);
        Span span2 = next("WorkerSpan2");
        WorkerSpan2 worker2 = new WorkerSpan2(latch, span2, tracer);
        Thread thread1 = new Thread(worker1);
        Thread thread2 = new Thread(worker2);
        thread1.start();
        thread2.start();
        latch.await();
        log.info("returning result");
        return "done";
    }
}

在运行时我没有得到zipkin的跟踪并得到警告:

2019-03-10 23:50:49.830  INFO [multithread-logging,5c855581aea992ade8c629db8eca728f,63e3c0f93a7c6044,false] 18108 --- [nio-8081-exec-6] c.s.t.e.d.MultiThreadController          : returning result
2019-03-10 23:50:49.830  INFO [multithread-logging,,,] 18108 --- [      Thread-14] c.s.t.e.demosleuththread.WorkerSpan2     : I am Worker 2 working
2019-03-10 23:50:49.830  INFO [multithread-logging,,,] 18108 --- [      Thread-13] c.s.t.e.demosleuththread.WorkerSpan1     : I am Worker 1 working
2019-03-10 23:50:49.834  WARN [multithread-logging,5c855581aea992ade8c629db8eca728f,63e3c0f93a7c6044,false] 18108 --- [nio-8081-exec-6] o.s.cloud.sleuth.util.ExceptionUtils     : Tried to close span but it is not the current span: [Trace: 5c855581aea992ade8c629db8eca728f, Span: e8c629db8eca728f, Parent: null, exportable:false].  You may have forgotten to close or detach [Trace: 5c855581aea992ade8c629db8eca728f, Span: 63e3c0f93a7c6044, Parent: 9a3c20df7f81aa72, exportable:false]
2019-03-10 23:50:52.841  WARN [multithread-logging,,,] 18108 --- [      Thread-14] o.s.cloud.sleuth.util.ExceptionUtils     : Tried to close span but it is not the current span: [Trace: 5c855581aea992ade8c629db8eca728f, Span: 63e3c0f93a7c6044, Parent: 9a3c20df7f81aa72, exportable:false].  You may have forgotten to close or detach null
2019-03-10 23:50:52.841  WARN [multithread-logging,,,] 18108 --- [      Thread-13] o.s.cloud.sleuth.util.ExceptionUtils     : Tried to close span but it is not the current span: [Trace: 5c855581aea992ade8c629db8eca728f, Span: 9a3c20df7f81aa72, Parent: e8c629db8eca728f, exportable:false].  You may have forgotten to close or detach null

我还想知道如何跨不同的线程传递跟踪信息。

spring spring-boot spring-cloud-sleuth zipkin
1个回答
0
投票

不幸的是,这个问题的最佳答案是升级到最新版本的Sleuth,我们已将其作为内部跟踪器迁移到Brave并解决了很多问题。

© www.soinside.com 2019 - 2024. All rights reserved.