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

春云侦探和春云流动力--如何传播跟踪ID?

杨和蔼
2023-03-14

Spring Cloud Sleuth跟踪头是否像这里描述的RabbitMq和Kafka那样被注入到Spring Cloud Stream Kinesis消息中?我们有一个REST控制器,它在处理POST请求之后,但在向客户机发送响应之前,向Kinesis发送一个Avro消息,该消息使用Spring Cloud Stream Kinesis总结事务。我想确保在REST控制器中启动的跟踪id被传播到Spring Cloud Stream Kinesis消息中,我不确定如何配置它,或者框架是否支持它。当我在处理这个Avro消息的微服务中记录消息和头时,我会看到一个不同的跟踪ID(当然还有span ID)。在REST控制器到Kinesis消息上下文之间的传播似乎没有正确配置和/或工作。

我们目前使用的是Spring Cloudhoxton.sr10、Spring Boot2.3.9.release和Spring Cloud Kinesis2.0.1.release

顺便说一句,我尝试将Spring Cloud Kinesis升级到2.0.2.release2.0.3.release2.0.4.release,但每次升级绑定器时都会遇到错误。我不确定Spring Cloud、Spring Boot和Spring Cloud Stream Kinesis的版本组合是什么。

示例代码

@PostMapping(
      value = "/accountEntry",
      consumes = {MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE},
      produces = {MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE})
  public ResponseEntity<Confirmation> createAccountEntry(
      @RequestBody final AccountEntry accountEntry,
      final HttpServletRequest request) {
    final AccountEntryEvent accountEntryEvent =
        new AccountEntryEvent(convertToAvro(accountEntry), AccountEntryEventType.CREATE_ACCOUNT_ENTRY);
    accountEntryChannels
        .accountEntryRequest()
        .send(
            MessageBuilder.withPayload(accountEntryEvent)
                .build());
    final Confirmation confirmation = buildConfirmation();
    final EntityModel<Confirmation> confirmationEntityModel =
        new EntityModel<>(confirmation);
    return new ResponseEntity<>(confirmationEntityModel, HttpStatus.ACCEPTED);
}

// with a brave.Tracer instance autowired, I'm able to obtain the trace id as follows
protected String getTraceId() {
  return tracer.currentSpan().context().traceIdString();
}
  
@Component
public interface AccountEntryChannels {
  @Output("account-entry-request")
  SubscribableChannel accountEntryRequest();
  ...
}

共有1个答案

解沈义
2023-03-14

如果您通过StreamBinderMessageChannel使用它,它应该可以工作;如果您以函数方式使用它(Supplier+BlockingQueue)它不应该,则不支持函数方式。

 类似资料:
  • 我的一些微服务使用log4j2作为记录器。Spring cloud Sleuth支持logback。在这个场景中,我如何使用Sleuth来获得分布式跟踪。我明白用log4j2使用sleuth,我必须实现某些类。我试过了,但没有运气。请帮忙

  • 我正在使用在日志文件中生成和。我可以使用版本。我尝试过使用,但无法使用版本。按照3.0。1文档中,他们已经删除了旧的MDC条目,但是 特雷赛德 我已尝试在zipkin上查看此请求的跟踪,并能够使用traceid和spanid查看它: 有人可以帮助我得到Traceid和spanid在日志文件使用logback/log4j?

  • 有必要为进入控制台日志的所有内容生成一个span id,但不幸的是,没有生成span id: 应用程序.yml logback.xml 为显式调用的日志记录方法生成span id:

  • 我正在使用spring-cloud-sleuth为http请求、rabbitMQ消息和sheduled事件的日志添加相关id。添加依赖项后,应用程序的启动时间增加了50%。所有其他配置属性,如spring.sleuth.async.enabled和spring.sleuth.grpc.enabled的默认值为true。如果我想减少我的应用程序启动时间,我需要在我的应用程序属性文件中将所有这些都过期

  • Spring Cloud Kafka Streams与Spring Cloud Stream、Spring Cloud Function、Spring AMQP和Spring for Apache Kafka有什么区别?

  • 我正在使用侦探,我想知道是否有可能获得当前的跟踪ID?我不需要添加任何响应或任何东西。我只是想要跟踪ID的电子邮件提醒开发团队在某些情况下。