簡體   English   中英

如何刪除 Kafka(Spring-boot)中的標頭?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM