spring-boot - 如何在ProducerRecord中设置kafka message key
问题描述
目前我正在使用 org.springframework.kafka.core.KafkaTemplate 发布带有标题的主题的 avro 消息。
@Override
public ListenableFuture<SendResult<K, V>> send(Message<?> message) {
ProducerRecord<?, ?> producerRecord = this.messageConverter.fromMessage(message, this.defaultTopic);
if (!producerRecord.headers().iterator().hasNext()) { // possibly no Jackson
byte[] correlationId = message.getHeaders().get(KafkaHeaders.CORRELATION_ID, byte[].class);
if (correlationId != null) {
producerRecord.headers().add(KafkaHeaders.CORRELATION_ID, correlationId);
}
}
return doSend((ProducerRecord<K, V>) producerRecord);
}
在 Message<?> 中,我们可以设置 value 和 headers 但不能设置 key。有没有办法在标题中输入密钥?如果是这样,请让我知道密钥的标题名称吗?有没有办法使用 KafkaTemplate 发送键、值和标头
解决方案
您必须在 上设置标题ProducerRecord
,例如:
RecordHeader yourHeader = new RecordHeader("yourHeaderName", "yourValue".toByteArray())
record.headers().add(recordHeaderKafkaMessageKey)
编辑:误读要求,对不起。消息密钥有一个已定义的 kafka 标头,即KafkaHeaders.MESSAGE_KEY
.
推荐阅读
- javascript - 获取 GoogleJsonResponseException 但查询已正确构建在 Google Apps 脚本中
- javascript - 从 Active Directory 获取用户信息(组、全名)
- ios - 如何从 SwiftUI 调用 PHPhotoLibrary presentLimitedLibraryPicker?
- python - 使用 tkinter gui 运行读取串行数据的后台线程
- php - 如何将 Laravel 自定义 Nova 工具设置为链接
- php - 注意:未定义的变量错误在堆栈溢出时尝试了所有方法
- maven - 如何一次在存储库中添加整个最新的可访问工件作为 maven pom 文件中的依赖项?
- bash - 了解 bash 查找
- android - 如何根据自己的喜好控制材质工具栏的高度?
- css - SCSS – 如何从嵌套地图中获取特定值