문제 상황
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> 타입으로 올바르게 변환할 수 있게 되었습니다.
이를 통해 메시지 처리가 성공적으로 이루어졌습니다.