繁体   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