Blog

트러블 슈팅 : Kafka Consumer 서비스가 `bookDonationEventApplyOutput` 토픽으로부터 메시지를 받아 처리하는 도중 `List<UserResponseDto>` 타입으로의 변환 과정에서 `ListenerExecutionFailedException` 오류가 발생

tag
트러블슈팅
날짜
2023/10/28
생성 일시
2023/10/29 07:12
작성자

문제 상황

Kafka Consumer 서비스가 bookDonationEventApplyOutput 토픽으로부터 메시지를 받아 처리하는 도중 List<UserResponseDto> 타입으로의 변환 과정에서 ListenerExecutionFailedException 오류가 발생하였습니다. 이 오류는 Kafka 리스너 메서드 실행 중 예외가 발생했음을 나타냅니다.

문제 분석

Consumer 서비스는 ObjectMapper를 사용하여 JSON 문자열을 Java 객체로 변환하려고 시도했습니다.
변환 대상은 List<UserResponseDto> 타입이었지만, ObjectMapper에 정확한 타입 정보가 제공되지 않아 List<LinkedHashMap> 타입으로 잘못 변환되었습니다.
이로 인해 예상치 못한 타입 불일치 문제가 발생하여 애플리케이션이 오류를 발생시켰습니다.

해결 방법

ObjectMapper에게 변환하려는 객체의 정확한 타입 정보를 제공해야 합니다.
TypeReference를 사용하여 List<UserResponseDto>의 정확한 타입 정보를 readValue 메서드에 전달하였습니다.
import com.fasterxml.jackson.core.type.TypeReference; @KafkaListener(topics = "bookDonationEventApplyOutput", groupId = "bookDonationEventApplyOutputConsumerGroup") public void AdminUserManagementConsume(String message) throws JsonProcessingException { ObjectMapper objectMapper = new ObjectMapper(); List<UserResponseDto> userResponseDtos = objectMapper.readValue(message, new TypeReference<List<UserResponseDto>>() {}); userResponseDtos.forEach(System.out::println); }
Java
복사

해결

정확한 타입 정보를 제공함으로써 ObjectMapper는 JSON 문자열을 List<UserResponseDto> 타입으로 올바르게 변환할 수 있게 되었습니다. 이를 통해 메시지 처리가 성공적으로 이루어졌습니다.