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