이 장의 핵심 흐름은 여기서 가장 잘 보인다

chap03를 이해하려면 결국 주문 생성 흐름을 따라가야 한다.

바로 이 흐름 안에서 Kafka, 이벤트, 커맨드, 오케스트레이터, 보상 처리라는 키워드가 한 번에 만난다.

큰 흐름을 먼저 문장으로 잡아 보자

주문 생성은 이제 아래처럼 흘러간다.

  1. 주문 서비스가 주문을 저장하고 order-created 이벤트를 발행한다
  2. 오케스트레이터가 이를 받아 decrease-product-command를 보낸다
  3. 상품 서비스가 재고 차감 후 product-decreased 이벤트를 발행한다
  4. 오케스트레이터가 모든 재고 차감이 끝났다고 판단하면 create-delivery-command를 보낸다
  5. 배송 서비스가 배송 생성 후 delivery-created 이벤트를 발행한다
  6. 오케스트레이터가 이를 보고 주문 완료 또는 보상 흐름을 결정한다
  7. 주문 서비스는 complete-order-command 또는 cancel-order-command를 소비한다

즉, 더 이상 한 서비스가 혼자 끝내는 흐름이 아니다.

여러 서비스가 메시지를 주고받으며 하나의 주문 경험을 완성한다.

image.png

시작점은 주문 생성 이벤트다

주문 서비스는 주문을 저장한 뒤 order-created 이벤트를 발행한다.

orderEventProducer.publishOrderCreated(
    new OrderCreatedEvent(orderId, userId, address, messageItems)
);

이 시점부터 흐름은 더 이상 주문 서비스 내부 메서드 호출만으로 이어지지 않는다.

메시지가 전체 흐름의 출발 신호가 된다.