2

고객 디시리얼라이저를 생성하려면이 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; 
    } 
} 
+0

디시리얼라이저가이 텍스트 비트를 생략하고 그 뒤에 나오는 JSON을 구문 분석하지 못하는 이유는 무엇입니까? – adarshr

+0

코드를 붙여 넣었습니다. 그것은 암묵적으로 행해지고 있습니다. 텍스트 비트를 가로 채서 생략하고 싶습니다. –

+0

'new JsonDeserializer <> (ConciseMessage.class)'- 그건 커스텀이 아닙니까? – adarshr

답변

2

. 따라서 맞춤 비 직렬화가되지는 않습니다. 문제를 해결하려면 텍스트 "로그 메시지 -"를 제거하는 로직이있는 디시리얼라이저를 직접 구현해야합니다.

+1

대단히 감사합니다 @adarshr –