Spring cloud stream binder kafka Spring云流Kafka:如何在生成Kafka主题的消息后访问Kafka头的recordMetadata

Spring cloud stream binder kafka Spring云流Kafka:如何在生成Kafka主题的消息后访问Kafka头的recordMetadata,spring-cloud-stream-binder-kafka,Spring Cloud Stream Binder Kafka,我想在生成一条发送给kafka主题的消息后获取偏移量和分区信息。 我通读了spring cloud stream kafka绑定文档,发现可以通过fecthing RECORD_元数据kafka头来实现 来自Spring文档:() recordMetadataChannel 成功发送结果应发送到的MessageChannel的bean名称;bean必须存在于应用程序上下文中。发送到通道的消息是已发送的消息(转换后,如果有),带有附加的头KafkaHeaders.RECORD_元数据。标头包含Ka

我想在生成一条发送给kafka主题的消息后获取偏移量和分区信息。 我通读了spring cloud stream kafka绑定文档,发现可以通过fecthing RECORD_元数据kafka头来实现

来自Spring文档:()

recordMetadataChannel 成功发送结果应发送到的MessageChannel的bean名称;bean必须存在于应用程序上下文中。发送到通道的消息是已发送的消息(转换后,如果有),带有附加的头KafkaHeaders.RECORD_元数据。标头包含Kafka客户端提供的RecordMetadata对象;它包括在主题中写入记录的分区和偏移量

ResultMetadata meta=sendResultMsg.getHeaders().get(KafkaHeaders.RECORD\u元数据,RecordMetadata.class)


我已经在属性文件中将输出主题bean名称配置为消息通道 spring.cloud.stream.kafka.bindings.acknowledge-out.producer.record-metadata-channel=确认输出

我的自定义界面和生产者类如下所示:

公共接口输出确认{
@输出(“确认输出”)
MessageChannel输出();
}
制片人级别:

@EnableBinding(OutputAcknowledgement.class)
公共类确认生成器{
@自动连线
输出确认输出确认;
公共布尔生成(确认){
Message msg=MessageBuilder.withPayload(确认).build();
布尔值=outputAcknowledgement.output().send(msg);
RecordMetadata RecordMetadata=msg.getHeaders().get(KafkaHeaders.RECORD\u METADATA,RecordMetadata.class);
正在获取recordMetadata的null


请建议我的方法是否正确?

您将获得空值,因为在您访问该消息对象时,它不存在于该消息对象中。根据文档,元数据仅在成功发布后才提供。有关如何通过为记录元数据通道提供处理程序/使用者来获取记录元数据的信息,请参阅本节。

您可以'您正在获取null,因为在您访问该消息对象时,该消息对象中不存在该元数据。根据文档,元数据仅在成功发布后提供。有关如何通过为记录元数据通道提供处理程序/使用者来获取记录元数据的信息,请参阅此部分