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

使用zipkin kafka时,Spring云流消息的检测丢失

赵星华
2023-03-14

我有以下设置:

  • 几个Spring Cloud Edgware服务,其中最著名的是Spring Cloud starter zipkinSpring Cloud stream binder kafka依赖项
  • 运行openzipkin/Zipkin:2.8docker映像的Zipkin服务器
  • 我看到服务的痕迹进入了“zipkin”主题,zipkin选择了这些痕迹,我可以在zipkin ui中查看它们
  • 乍一看,一切似乎都很正常,尤其是对于我的服务之间的rest调用,但我只是看到它不适用于我自己的消息,我使用这些消息在我的服务之间进行异步html" target="_blank">通信(我使用spring cloud stream)
  • 我可以看到来自TraceChanneltReceptor的日志消息,表明检测正在进行
  • 但是,当我检查Kafka中的数据时,跟踪消息头不在消息中

当我在过去包含sping-lowd-sleuth-stream依赖项时,曾经有一个Stream环境Post处理器将跟踪头添加到kafka绑定中。但是医生现在明确指出:

注意:spring cloud sleuth stream已被弃用,并且与这些目的地不兼容

我该怎么做才能让它正常工作呢?是否自己将标题添加到绑定配置中?还是我遗漏了什么?

共有1个答案

孟俊发
2023-03-14

那是Edgware的Spring Cloud Sleuth中的错误。Edgware中的Stream Kafka Binder要求显式传递应该传播的标头。在类路径上添加sleuth-stream的副作用正是这个特性。通过修复https://github.com/spring-cloud/spring-cloud-sleuth/issues/1005问题,我们将丢失的功能添加回核心。这不会移植到Finchley,因为Finchley中的Stream Kafka Binder默认会传递所有标头。

Edgware的解决方法是以以下方式传递标题列表:

spring:
  cloud:
    stream:
      kafka:
        binder:
          headers:
            - spanId
            - spanSampled
            - spanProcessId
            - spanParentSpanId
            - spanTraceId
            - spanName
            - messageSent
 类似资料:
  • 我正在尝试用spring cloud stream实现spring cloud契约。我有一个使用StreamBridge的制作人 方法sendMessage()是从rest控制器调用的。 我的合同是这样的: 当我运行测试时,会调用triggerCreateOrganization()方法,并在日志中看到日志消息“生产组织到主题”。 我在生成的测试的基类上有@AutoConfigureMessage

  • 如何使用新的Spring Cloud Stream Kafka功能模型发送消息? 不推荐的方式是这样的。 但是我如何以函数式风格发送消息呢? 应用yml公司 我会自动连接MessageChannel,但对于process、process-out-0、output或类似的东西,没有MessageChannel Bean。或者我可以用供应商Bean发送消息吗?谁能给我举个例子吗?谢谢!

  • 如果一个主题订阅者在向该主题/订阅者发送推送通知时没有在线,那么他/她的消息会丢失还是当他们在线时才收到消息?

  • 我已经使用Spring云流启动了一个小型微服务。 我只有两个流绑定,如下所示: 我用Serenity开发了组件测试,我将通道注入到我想要发送测试消息的地方: 哪里: 只是定义为字符串常量: 组件测试模块导入依赖项: 我发送的信息如下: 快乐流工作正常。但是,我想在侦听器无法处理消息时测试错误流。 这是一个监听器的例子: 从try/catch引发异常时,错误由服务激活器处理: 在没有Spring-C

  • 我目前正在使用带有的Kafka绑定器的Spring Cloud Stream为我的Spring Boot微服务执行消息记录。 我有: 生产者将消息发布到订阅频道 在消息从生产者发布到流并被消费者收听的整个过程中,可以观察到preSend方法被触发了两次: 一次在生产者端-消息发布到流时 然而,出于日志记录的目的,我只需要在消费者端截获并记录消息。 是否有任何方法可以仅在一侧(例如消费者侧)截获SC