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