-
broker 클러스터링
-
메시지 영속화할 경우 데이터를 바로 poll하면 안됨.
-
MessageDispatcher 스레드에 대한 헬스 체크 및 재시작!
-
MessageDispatcher에서 Host에 대한 헬스 체크.
-
Broker에서 메시지 큐 정책 적용.
-
Broker에서 메시지 전달 전 영속화.
-
MessageDispatcher를 yml 로 구성하는 기능 추가 고려.
-
Message 내용으로 Map 또는 Object를 받을 수 있도록 변경
-
worker, threadpool을 가지는 자료구조 만들기(core)
-
worker 클래스 분리, Dispatcher의 sender final 제거
-
지수적 백오프
-
공유 스레드 풀 + Dispatcher 별 Semaphore 조합 고려
-
테스트 작성
-
DX 개선 (설정 방식 개선)
-
consumer 메시지 재처리 멱등성 보장(with redis)
-
다중 Exchange 지원 여부
-
처리량을 위한 Dispatcher 패턴 매칭 캐시 도입
-
Producer 최대 재시도 횟수 초과 시 예외 누락(silent failure) 버그 수정 및 지수적 백오프 도입
-
메시지 구조 변경
- 지금은 broker에서 메시지 객체 참조하고 있음.
- 이로 인해, 엄청난 수의 직/역직렬화와 바인딩이 발생한다.
- producer
- 객체를 byte[]로 변경 (직렬화)
- broker
- byte[]를 Message 객체로 변경 (역직렬화)
- Message 영속화 (직렬화)
- Dispatcher의 읽기 (역직렬화)
- Sender의 메시지 전달 (직렬화)
- consumer
- byte[]를 Message 객체로 변경 (역직렬화)
- 근데 broker는 Topic을 제외한 내부 데이터에 관심이 없음.
- 그러므로, producer 측에서 byte[]로 메시지를 직렬화해서 보내고, broker는 이걸 다루지 않는 방식으로 변경하는 것을 고려해볼 수 있음.
- producer가 byte[]로 메시지를 보내면, broker는 그저 byte[]를 그대로 저장하고 전달하기만 하면 된다.
- 역직렬화는 consumer 측에서 메시지를 받을 때 consumer가 알아서 하면 된다.
- 이렇게 하면? 직/역직렬화와 바인딩이 크게 줄어들어서 성능이 개선될 수 있다.
- producer
- 객체를 byte[]로 변경 (직렬화)
- broker
- 없음
- consumer
- byte[]를 Message 객체로 변경 (역직렬화)
- producer
- 지금은 broker에서 메시지 객체 참조하고 있음.