고객 디시리얼라이저를 생성하려면이 link에 나열된 단계를 따르고 있습니다. 카프카에서받은 메시지에는 json 문자열 전에 일반 텍스트 "로그 메시지 -"가 있습니다. 디시리얼라이저가이 문자열을 무시하고 json 데이터를 구문 분석하도록합니다. 그것을 할 수있는 방법이 있습니까?스프링 카프카 사용자 정의 디시리얼라이저
당신이 ConciseMessage
형식으로 메시지를 변환 할, 당신은 단지 카프카 말하고있다 라인 new JsonDeserializer<>(ConciseMessage.class)
를 작성하여 응용 프로그램
@SpringBootApplication
public class TransactionauditServiceApplication {
public static void main(String[] args) throws InterruptedException {
new SpringApplicationBuilder(TransactionauditServiceApplication.class).web(false).run(args);
}
@Bean
public MessageListener messageListener() {
return new MessageListener();
}
public static class MessageListener {
@KafkaListener(topics = "ctp_verbose", containerFactory = "kafkaListenerContainerFactory")
public void listen(@Payload ConciseMessage message,
@Header(KafkaHeaders.RECEIVED_PARTITION_ID) int partition) {
System.out.println("Received Messasge in group foo: " + message.getStringValue("traceId") + " partion " + partition);
}
}
}
ConsumerConfig
@EnableKafka
@Configuration
public class KafkaConsumerConfig {
@Value(value = "${kafka.bootstrapAddress:localhost:9092}")
private String bootstrapAddress;
@Value(value = "${groupId:audit}")
private String groupId;
@Bean
public ConsumerFactory<String, ConciseMessage> consumerFactory() {
Map<String, Object> props = new HashMap<>();
props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapAddress);
props.put(ConsumerConfig.GROUP_ID_CONFIG, groupId);
return new DefaultKafkaConsumerFactory<>(props, new StringDeserializer(), new JsonDeserializer<>(ConciseMessage.class));
}
@Bean
public ConcurrentKafkaListenerContainerFactory<String, ConciseMessage> kafkaListenerContainerFactory() {
ConcurrentKafkaListenerContainerFactory<String, ConciseMessage> factory = new ConcurrentKafkaListenerContainerFactory<>();
factory.setConsumerFactory(consumerFactory());
return factory;
}
}
디시리얼라이저가이 텍스트 비트를 생략하고 그 뒤에 나오는 JSON을 구문 분석하지 못하는 이유는 무엇입니까? – adarshr
코드를 붙여 넣었습니다. 그것은 암묵적으로 행해지고 있습니다. 텍스트 비트를 가로 채서 생략하고 싶습니다. –
'new JsonDeserializer <> (ConciseMessage.class)'- 그건 커스텀이 아닙니까? – adarshr