1️⃣ Orchestration-based Saga + RabbitMQ

📌 예시: 병원 예약 시스템 (예약 → 진료 → 결제)

병원 시스템에서는 예약(BookingService), 진료(ConsultationService), **결제(PaymentService)**가 순차적으로 처리돼야 해.

중앙 OrchestratorRabbitMQ의 Direct Queue를 사용해 요청을 관리하는 방식.

🔹 흐름

  1. 예약 생성: BookingServiceOrchestrator에 "예약 요청" 전송
  2. 진료 요청: Orchestrator"consultation-queue"에 진료 요청 메시지 전송
  3. 진료 완료: ConsultationService"payment-queue"에 결제 요청 메시지 전송
  4. 결제 완료: PaymentServiceOrchestrator에 결제 완료 메시지 전송
  5. Orchestrator가 환자에게 완료 알림 전송

⚠ 보상 트랜잭션

🔹 RabbitMQ를 쓰는 이유?


2️⃣ Choreography-based Saga + RabbitMQ

📌 예시: 온라인 강의 플랫폼 (강의 등록 → 결제 → 수강 알림)

온라인 교육 플랫폼에서는 강의 등록(LectureService), 결제(PaymentService), **수강 알림(NotificationService)**이 독립적으로 동작해야 해.

RabbitMQ의 Fanout Exchange를 사용해 이벤트 기반으로 처리

🔹 흐름

  1. LectureService"lecture-created-event" 발행 (RabbitMQ "lecture-exchange")
  2. PaymentService"lecture-created-event"을 구독 후 결제 처리 → "payment-success-event" 발행
  3. NotificationService"payment-success-event"을 구독 후 이메일/SMS 알림 전송