LabHub

시스템 간 연동 (EAI) · 비동기 큐 연동과 재처리 · 실습

파일 큐 소비자와 멱등 재처리 구현

LabHub 에서 이어서 보기

목표

디렉터리 기반 큐로 소비자를 만들고, 파싱 실패를 격리하고,
DB 제약으로 멱등성을 보장하고, 적체 감시와 재처리까지 구현할 수 있게 됩니다.

왜 중요한가

비동기 연동에서 중복은 예외가 아니라 기본값입니다. 'exactly-once' 는
전달 계층의 마법이 아니라 '적어도 한 번 전달 + 수신측 중복 제거'의 결과입니다.
그래서 소비자는 언제나 중복을 가정하고 짜야 합니다.
그리고 파싱 실패 메시지를 재시도 큐에 넣으면 그 메시지가 맨 앞에서 계속 실패하며
뒤의 정상 메시지를 막습니다(독약 메시지). 막힌 큐는 곧 업무 정지입니다.
이 두 가지를 손으로 구현해 보면 비동기 설계의 감이 생깁니다.

단계

1. /root/q/inbox, /root/q/processing, /root/q/done, /root/q/error 를 만들고
/opt/lab/fixtures/eai/queue/inbox/ 의 모든 .json/root/q/inbox 로 복사합니다.
inbox 에 20개 파일이 있어야 합니다.
2. 메시지 구조를 파악해 /root/q/schema.csv 를 만듭니다.
첫 줄은 field,type,role. 정상 메시지에 있는 필드를 모두 적고,
role 열에는 멱등키 역할을 하는 필드에 idempotency-key 를,
순서 판정에 쓰는 필드에 sequence 를 적습니다.
3. /root/q/consume.py 를 만들고 실행합니다. 동작은 아래와 같습니다.

참고

단계 8개

  1. 큐 디렉터리 구성
  2. 메시지 구조 파악
  3. 소비자 구현과 실행
  4. 멱등성 확인
  5. 실패 사유 분류
  6. 순서 보장 검증
  7. 적체 모니터링 스크립트
  8. 재처리 스크립트