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

无法用spring-cloud-sleuth跟踪spring-cloud-stream侦听器

梁嘉祥
2023-03-14

我有两个非常简单的spring-cloud-stream应用程序。消息生产者Service3通过Binder-Kafka向消费者Service4发送消息。

我用春云侦探来追踪它们之间的跨度。但是只有Service3中的跨在zipkin服务器中可用。Service4没有显示span。

dependencies {
compile('org.springframework.boot:spring-boot-starter-web')
compile('org.springframework.boot:spring-boot-starter-thymeleaf')

compile('org.springframework.cloud:spring-cloud-starter-sleuth')

// Marshal spans over a Spring cloud stream binder
compile('org.springframework.cloud:spring-cloud-sleuth-stream')
compile('org.springframework.cloud:spring-cloud-stream-binder-kafka')

testCompile group: 'junit', name: 'junit', version: '4.11'
} 


@SpringBootApplication
public class Service3  {
    public static void main(String[] args) {
        SpringApplication.run(Service3.class, args);
    }
}


@Controller
@EnableBinding(Source.class)
public class WebController {

    @Autowired
    private Source source;


    @GetMapping("/srv4")
    private String getSrv4Info(){
        String msg = "Hello Service 4";
        this.source.output().send(MessageBuilder.withPayload(msg).build());

        return "srv4";
    }
}
dependencies {
    compile('org.springframework.boot:spring-boot-starter-web')

    compile('org.springframework.cloud:spring-cloud-starter-sleuth')

    // Marshal spans over a Spring cloud stream binder
    compile('org.springframework.cloud:spring-cloud-sleuth-stream')
    compile('org.springframework.cloud:spring-cloud-sleuth-zipkin-stream')
    compile('org.springframework.cloud:spring-cloud-stream-binder-kafka')

    runtime('io.zipkin.java:zipkin-autoconfigure-ui')

    testCompile group: 'junit', name: 'junit', version: '4.11'
}

@SpringBootApplication
@EnableZipkinStreamServer
public class Service4 {
    public static void main(String[] args) {
        SpringApplication.run(Service4.class, args);
    }
}

@EnableBinding(Sink.class)
public class MsgReceiver {
    @StreamListener(Sink.INPUT)
    private void listen(Message<String> msg){
        System.out.println(msg.getPayload());
    }
}

共有1个答案

漆雕令秋
2023-03-14

这是猜测。

Kafka没有消息头(存储跨的地方)的概念。

因此,SCSt必须在有效负载中嵌入消息头。

不幸的是,模式目前不受支持,您必须单独列出头部。我们正在考虑添加对模式和/或默认传输所有头的支持。

 类似资料:
  • 我已经使用spring-cloud-stream和RabbitMQ-binders和spring-cloud-sleuth建立了一个演示项目。 我有一个预定的春-云-流源: 我是不是漏掉了什么?(对zipkin来说相当陌生,勇敢而侦探)

  • 我有一些微服务作为分布式日志管理器与Spring Cloud Sleuth一起运行。对于一些微服务,还包括Spring AOP,主要是关于方法执行时间日志的建议(下面的代码)。 现在,我可能在这里错过了AOP点,并且不太明白建议何时真正生效,但是否有可能将Sleuth跟踪ID包含在从定义的类生成的日志中? 代码: 方面类(从组织aspectj和组织slf4j导入): Spring Boot版本为2

  • 我们正在考虑利用spring cloud sleuth进行分布式跟踪,并且我们已经开发了一个PoC。这似乎是一个很好的解决方案,开箱即用。 但我有一个后续问题: 我们使用随机UUID和64位ID作为跟踪ID。我们知道自定义头(例如,一个新的跟踪Id)可以与sleuth头一起添加,但是否可以覆盖slueth的默认跟踪Id格式?我们已经查看了文档,也许传播是我们要走的路。有谁做了这一点,可以指出我们在

  • 我对以更详细的方式记录跟踪信息感兴趣。对于每个日志语句,我都希望以JSON格式发出zipkin跟踪--非常接近于这里描述的内容:https://zipkin.io/pages/data_model.html 在《侦探》中完成这一点的最佳方法是什么?

  • 我目前正在使用spring cloud sleuth依赖项进行spring webflux项目。 我正在开发一组API,这些API可以获得包含3个字符串的请求负载。我想连接这3个字符串作为我的自定义跟踪id。我还想达到以下要求。 这个自定义跟踪id应该能够添加到每个日志中。(我们通过在log4j.xml文件中添加以打印所有日志中的traceId来获取日志中的sleuth跟踪id) 注意,sprin

  • 更新:我已将代码推送到我的回购协议中,以便人们可以查看那里,看看可能出现了什么问题。 编辑:我几乎可以肯定是客户端代码没有向服务器发布任何统计数据,但是下面的指南都没有解释如何启用:是否有我缺少的配置设置? 我一直在关注OpenZipkin和Spring Sleuth的快速启动:我从docker Zipkin使用和Cassandra作为后端运行Zipkin服务器: 我已经创建并运行了Spring