이벤트 드리븐 구현 샘플

참고 소스코드

예제 설명

주문(order) 서비스와 상품(product) 서비스, 배송(delivery) 서비스의 관계가 Event-Driven 방식으로 호출을 하여 쇼핑몰을 구성합니다.

  1. 사용자가 주문을 하였을때, OrderPlaced 라는 이벤트를 Kafka 에 발송 합니다.
  2. 주문 서비스에서 OrderPlaced 라는 이벤트를 구독하여 재고량을 수정합니다.
  3. 배송 서비스에서 OrderPlaced 라는 이벤트를 구독하여 배송 시작을 합니다.

Order 서비스 Order.java

@Entity
public class Order {
        @PostPersist
        private void publishOrderPlaced(){
                OrderPlaced orderPlaced = new OrderPlaced(this);
                orderPlaced.publish();
        }
}

Product 서비스 ProductService.java

@Service
public class ProductService {

        @StreamListener(KafkaProcessor.INPUT)
        public void onOrderPlaced(@Payload OrderPlaced orderPlaced) {
                // 재고량 수정
                <!--Optional<Product> productOptional = productRepository.findById(orderPlaced.getProductId());-->
                Product product = productOptional.get();
                product.setStock(product.getStock() - orderPlaced.getQuantity());

                productRepository.save(product);
        }
}

Delivery 서비스 DeliveryService.java

@Service
public class DeliveryService {

        @StreamListener(KafkaProcessor.INPUT)
                public void onOrderPlaced(@Payload OrderPlaced orderPlaced) {
                // 배송 시작
                deliveryRepository.save(delivery);
        }
}
*MSA School의 모든 콘텐츠에 대한 권리는 MSA School에 있으며, 무단 복제 및 배포를 금합니다. 영리 목적의 사용은 허용되지 않으며, 개인적 용도로 복제할 경우 반드시 출처를 표기해야 합니다.
© uEngine. All Rights Reserved. | 주소 : 서울특별시 서초구 신반포로45길 18 502호(잠원동, 주일빌딩)
사업자등록번호 : 211-87-95355 | 전화번호 : 02-567-8301 | 대표이사 : 장진영
*MSA School의 모든 콘텐츠에 대한 권리는 MSA School에 있으며, 무단 복제 및 배포를 금합니다.
영리 목적의 사용은 허용되지 않으며, 개인적 용도로 복제할 경우 반드시 출처를 표기해야 합니다.
© uEngine. All Rights Reserved.
주소 : 서울특별시 서초구 신반포로45길 18 502호(잠원동, 주일빌딩)
사업자등록번호 : 211-87-95355
전화번호 : 02-567-8301
대표이사 : 장진영