Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Kafka Event Consume 시 DomainEvent 인터페이스 역직렬화 문제 #27

Open
hyunsb opened this issue Dec 12, 2024 · 1 comment
Open
Assignees

Comments

@hyunsb
Copy link
Member

hyunsb commented Dec 12, 2024

Contents

Kafka에 발행하는 이벤트의 구조는 아래와 같다.

public interface DomainEvent { }

public class OrderCreateEvent implements DomainEvent {

    private Long orderId;
    private Long productId;
    private Integer quantity;
    private Long orderedBy;
}
public class DomainEventEnvelop<T extends DomainEvent> implements Serializable {

    private T event;

    private UUID eventId;
    private LocalDateTime createdAt;
    private String eventType;
    private String source;
}

위의 이벤트를 DomainEventEnvelop<? extends DomainEvent> 형태로 kafka에 publish한다.

문제는 이벤트를 consume할 때 역직렬화 시도 시점에 발생했다.
DomainEventEnvelop 까지는 역직렬화가 진행되었지만 DomainEvent를 어떤 구현체로 역직렬화 할 지 선택하지 못하여 예외가 발생했다.


해결방법

현재 Jackson 라이브러리로 Json을 파싱하고 있기에 ObjectMapper를 사용하여
DomainEvent에 대한 Custom Deserializer를 생성한다.
각 이벤트를 구독하는 EventListener에 구현한 Custom Deserializer를 주입해주어 처리할 수 있다.

다만 해당 방법은 구독하는 event가 추가될 때마다 구현해야 하는 코드가 많아진다.
따라서 DomainEventEnvelopeventType 프로퍼티의 값을 통해 역직렬화할 클래스를 찾는 방법을 모색해봐야 할 것 같다.

@hyunsb
Copy link
Member Author

hyunsb commented Dec 13, 2024

일단 해결

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant