[英]How do I remove the header in a Kafka (Spring-boot)?
我需要向特定的 Kafka 主題發送消息。 我使用以下 KafkaTemplate 來執行此操作: KafkaTemplate<String, RequestDto>
Kafka生產者中放入以下參數:
private ProducerFactory<String, RequestDto> producerConfigs() {
Map<String, Object> props = new HashMap<>();
props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, kafkaServer);
props.put(ProducerConfig.CLIENT_ID_CONFIG, clientId);
props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, JsonSerializer.class);
return new DefaultKafkaProducerFactory<>(props);
}
創建生產者:
public KafkaTemplate<String, RequestDto> kafkaTemplate() {
KafkaTemplate<String, RequestDto> template = new KafkaTemplate<>(producerConfigs());
template.setMessageConverter(new StringJsonMessageConverter());
return template;
}
而當我執行“send”方法時,我有一條消息發送到 Kafka 主題,但同時我發送了 header,其中包含請求的 DTO 文件的路徑。
ListenableFuture<SendResult<String, RequestDto>> result = kafkaTemplate.send(topic, requestDto);
由於這個標頭,應用程序中出現了一些問題,這是一個消費者,我對此無能為力。 有什么方法可以從查詢中刪除此標頭?
您可以通過添加帶有ADD_TYPE_INFO_HEADERS false 的ADD_TYPE_INFO_HEADERS
創建DefaultKafkaProducerFactory
JsonSerializer jsonSerializer = new JsonSerializer();
jsonSerializer.setAddTypeInfo(false); //
設置為 false 以禁用添加類型信息標頭。
然后使用鍵和值序列化器創建DefaultKafkaProducerFactory
return new DefaultKafkaProducerFactory<>(props,new StringSerializer(),jsonSerializer);
您還可以通過配置屬性通過生產者端禁用此屬性
JsonSerializer.ADD_TYPE_INFO_HEADERS(默認為 true):您可以將其設置為 false 以禁用 JsonSerializer 上的此功能(設置 addTypeInfo 屬性)。
並在消費者方面忽略
JsonDeserializer.USE_TYPE_INFO_HEADERS(默認為 true):您可以將其設置為 false 以忽略序列化程序設置的標頭。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.