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

song yuheon·2023년 10월 29일
0

Trouble Shooting

목록 보기
46/57
post-thumbnail
post-custom-banner

문제 상황


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);
}

해결


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


profile
backend_Devloper
post-custom-banner

0개의 댓글