配置类
@Bean
KafkaDefaultKafkaProducerFactoryCustomizer kafkaDefaultKafkaProducerFactoryCustomizer() {
return new KafkaDefaultKafkaProducerFactoryCustomizer(objectMapper());
}
@Bean
KafkaDefaultKafkaConsumerFactoryCustomizer defaultKafkaConsumerFactoryCustomizer() {
return new KafkaDefaultKafkaConsumerFactoryCustomizer(objectMapper());
}
public ObjectMapper objectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setLocale(Locale.CHINA);
objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
objectMapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
objectMapper.getDeserializationConfig().withoutFeatures(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
return objectMapper;
}
- KafkaDefaultKafkaConsumerFactoryCustomizer
public class KafkaDefaultKafkaConsumerFactoryCustomizer implements DefaultKafkaConsumerFactoryCustomizer {
private final ObjectMapper objectMapper;
public KafkaDefaultKafkaConsumerFactoryCustomizer(ObjectMapper objectMapper) {
this.objectMapper = objectMapper;
}
@Override
public void customize(DefaultKafkaConsumerFactory<?, ?> consumerFactory) {
if (Objects.nonNull(consumerFactory)) {
JsonDeserializer objectJsonDeserializer = new JsonDeserializer<>(objectMapper);
objectJsonDeserializer.getTypeMapper().addTrustedPackages("*");
consumerFactory.setValueDeserializer(objectJsonDeserializer);
}
}
}
- KafkaDefaultKafkaProducerFactoryCustomizer
public class KafkaDefaultKafkaProducerFactoryCustomizer implements DefaultKafkaProducerFactoryCustomizer {
private final ObjectMapper objectMapper;
public KafkaDefaultKafkaProducerFactoryCustomizer(ObjectMapper objectMapper) {
this.objectMapper = objectMapper;
}
@Override
public void customize(DefaultKafkaProducerFactory<?, ?> producerFactory) {
if (Objects.nonNull(producerFactory)) {
producerFactory.setValueSerializer(new JsonSerializer<>(objectMapper));
}
}
}
@Slf4j
@Component
public class RegeoCodecEventKafkaListener {
@KafkaListener(id = "regeo-listener",
topics = "${geocoding.kafka.topic:regeo-event}",
concurrency = "${geocoding.kafka.partitions:10}")
public void regeoListener(Regeocode geo) {
log.info(" received kafka data [{}]", geo.getFormattedAddress());
}
}