Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot 当kafka消费者同时批量接收消息时,如何获取唯一的跟踪id_Spring Boot_Spring Kafka_Mdc - Fatal编程技术网

Spring boot 当kafka消费者同时批量接收消息时,如何获取唯一的跟踪id

Spring boot 当kafka消费者同时批量接收消息时,如何获取唯一的跟踪id,spring-boot,spring-kafka,mdc,Spring Boot,Spring Kafka,Mdc,在我的应用程序中,我们使用来自一个名为topicA的主题的消息(有效负载),然后将其发布到另一个topicB。在使用有效负载时,我们将获取该请求的跟踪Id,并将其设置为有效负载,然后发布到topicB,以便另一个微服务从topicB使用该有效负载。因此,我们可以通过不同的微服务保留相同的跟踪id。如果消费者使用一条或多条消息,我们将一次处理一个请求。当消费者在当时为所有消息应用程序批量接收消息时,我们面临的问题是生成相同的跟踪id。如果publisher向topicA发布10条消息,我们将通过应

在我的应用程序中,我们使用来自一个名为topicA的主题的消息(有效负载),然后将其发布到另一个topicB。在使用有效负载时,我们将获取该请求的跟踪Id,并将其设置为有效负载,然后发布到topicB,以便另一个微服务从topicB使用该有效负载。因此,我们可以通过不同的微服务保留相同的跟踪id。如果消费者使用一条或多条消息,我们将一次处理一个请求。当消费者在当时为所有消息应用程序批量接收消息时,我们面临的问题是生成相同的跟踪id。如果publisher向topicA发布10条消息,我们将通过应用程序一次处理一条记录为所有10条请求获取一个跟踪id。我们应该做些什么,以便在使用消息时,我们为每个请求获得唯一的跟踪id,即10个请求获得10个跟踪id。下面是我们使用消息并设置traceid的代码片段

 @KafkaListener(topics = "${test.topic}")
  public void consume(
      @NotNull final ConsumerRecord<String, String> cr,
      @Payload final String payload,
      final Acknowledgment ack) {
    final Instant startTime = Instant.now();
    log.trace(
        "Received with key=\"{}\", Partition=\"{}\", Offset=\"{}\"",
        cr.key(),
        cr.partition(),
        cr.offset());
    log.info("Received payload=\"{}\"", payload);
    final ObjectMapper objectMapper = new ObjectMapper();
    AbcRequest abcRequest = objectMapper.readValue(payload, AbcRequest.class);
    assetsRequest.setTraceId(String.valueOf(MDC.get("X-B3-TraceId")));
    processMessage(assetsRequest);
@KafkaListener(topics=“${test.topic}”)
公共消费(
@NotNull最终用户记录cr,
@有效载荷最终管柱有效载荷,
最终确认(确认){
final Instant startTime=Instant.now();
log.trace(
接收的密钥为“{}\”,分区为“{}\”,偏移量为“{}\”,
cr.key(),
cr.分区(),
cr.offset());
log.info(“收到的有效负载=\”{}\”,有效负载);
最终ObjectMapper ObjectMapper=新ObjectMapper();
AbcRequest AbcRequest=objectMapper.readValue(有效载荷,AbcRequest.class);
AssetRequest.setTraceId(String.valueOf(MDC.get(“X-B3-TraceId”));
processMessage(AssetRequest);