UMSAgent 메시지 발송 실패와 같은 오류 상황 발생 시, 데이터를 **파일 기반 저장소(MVStore)**에 안전하게 보관하고, 정해진 **지연 시간(N초)**이 경과한 후에만 다시 처리함으로써 시스템의 안정성과 처리의 정확성을 확보하는 데 목적이 있습니다.
재처리 작업은 재처리 매니저와 일감 처리 쓰레드 매니저 두 핵심 주체의 협력을 통해 순환적으로 이루어집니다.
| 단계 | 주체 | 동작 | 상세 설명 |
|---|---|---|---|
| STEP 1 | 호출 측 & 재처리 매니저 | 일감 등록 및 예약 | 실패한 데이터를 재처리 매니저에 전달하고, 현재 시간에 N초를 더하여 재처리 예약 시간을 설정합니다. 매니저는 데이터를 **MVStore(파일 DB)**에 시간순으로 저장합니다. |
| STEP 2 | 일감 처리 쓰레드 매니저 | 일감 요청 (Polling) | 일감 처리 쓰레드 매니저는 지정된 주기(Interval)마다 재처리 매니저에게 접근하여 "처리 가능한 일감이 있는지" 지속적으로 요청(Polling)합니다. |
| STEP 3 | 재처리 매니저 | 만료 일감 반환 | 요청을 받은 재처리 매니저는 저장된 일감 중 현재 시간이 지난(N초가 경과된) 일감을 확인합니다. 만료된 일감이 있다면 해당 일감을 MVStore에서 삭제한 후 일감 처리 쓰레드 매니저에게 반환합니다. |
| STEP 4 | 일감 처리 쓰레드 | 실제 재처리 실행 | 반환받은 일감을 일감 처리 쓰레드가 받아 해당 데이터에 대한 실제 재처리 로직 (예: 메시지 재발송, 결과 업데이트 등)을 다시 호출하여 실행합니다. |
[프로세스 플로워]
💥 실패 데이터 발생 (호출 측) ↓
➡ STEP 1. 재처리 매니저 MVStore 일감 등록 및 예약 (N초 후) (파일 DB)에 저장) ↓
➡ STEP 2. 일감 요청 (일감 처리 쓰레드 매니저가 주기적으로 요청) ↓
➡ STEP 3. 만료 확인 및 반환 (재처리 매니저) (현재 시간 > 예약 시간? ) ↓
➡ STEP 4. 실제 재처리 실행 (일감 처리 쓰레드) (실패했던 데이터 재요청 처리)
| 특징 | 구현의 의미 |
|---|---|
| 지연 큐 (Delayed Queue) | N초 지연 처리: STEP 1에서 설정된 예약 시간이 지나야만 STEP 3에서 일감이 반환됩니다. 이를 통해 시스템 부하를 관리하고 일시적 오류를 회피합니다. |
| MVStore 영속성 | 데이터 손실 방지: 재처리 데이터는 메모리가 아닌 파일 DB에 저장되므로, 시스템이 비정상적으로 종료되어도 재처리할 목록이 안전하게 보존됩니다. |
| 순서 보장 로직 | Key 인코딩: 일감 등록 시 키(Key)에 예약 시간을 인코딩하여, 만료된 일감 중에서도 가장 오래된 일감부터 (FIFO와 유사하게) 처리되도록 순서를 보장합니다. |