Skip to content

Sekans Akışı

Sipariş Oluşturma

Sipariş Oluşturma

  • Client, Ingress üzerinden POST /orders isteği gönderir.
  • Ingress, isteği Order Service’e iletir.
  • Order Service, Order Database’de bekleyen (pending) bir sipariş oluşturur.
  • Order Service, Order Service Sidecar’a “Check Credit” (Kredi Kontrolü) olayını yayınlar.
  • Order Service Sidecar, RabbitMQ’ya “Check Credit” olayını yayınlar.

Kredi Kontrolü:

Kredi Kontrolü

  • RabbitMQ, “Check Credit” olayını User Service Sidecar’a iletir.
  • User Service Sidecar, User Service’e kredi kontrolü yapar.
  • User Service, User Database’de kredi mevcudiyetini kontrol eder.
  • Eğer kredi mevcut değilse:
    • User Service, User Service Sidecar’a “Credit Unavailable” (Kredi Mevcut Değil) olayını yayınlar.
    • User Service Sidecar, RabbitMQ’ya “Credit Unavailable” olayını yayınlar.
    • RabbitMQ, “Credit Unavailable” olayını Order Service Sidecar’a iletir.
    • Order Service Sidecar, Order Service’e kredi mevcut olmadığını bildirir.
    • Order Service, Order Database’de siparişin durumunu “Cancelled” (İptal Edildi) olarak günceller.
    • Order Service, Order Service Sidecar’a “Order Cancelled” (Sipariş İptal Edildi) olayını yayınlar.
    • Order Service Sidecar, RabbitMQ’ya “Order Cancelled” olayını yayınlar.
    • RabbitMQ, “Order Cancelled” olayını User Service Sidecar’a iletir.
    • User Service Sidecar, User Service’e ayrılan krediyi serbest bırakmasını söyler.
    • User Service, User Database’de ayrılan krediyi serbest bırakır.
    • Order Service, Ingress’e “Credit Unavailable - Order Cancelled” (Kredi Mevcut Değil - Sipariş İptal Edildi) yanıtını döndürür.
    • Ingress, Client’a yanıtı iletir.
  • Eğer kredi mevcutsa:
    • User Service, User Database’de krediyi ayırır.
    • User Service, User Service Sidecar’a “Credit Reserved” (Kredi Ayrıldı) olayını yayınlar.
    • User Service Sidecar, RabbitMQ’ya “Credit Reserved” olayını yayınlar.
    • RabbitMQ, “Credit Reserved” olayını Order Service Sidecar’a iletir.
    • Order Service Sidecar, Order Service’e kredi ayrıldığını bildirir.

Stok Kontrolü:

Stok Kontrolü

  • Order Service, Order Service Sidecar’a “Check Stock” (Stok Kontrolü) olayını yayınlar.
  • Order Service Sidecar, RabbitMQ’ya “Check Stock” olayını yayınlar.
  • RabbitMQ, “Check Stock” olayını Product Service Sidecar’a iletir.
  • Product Service Sidecar, Product Service’e stok kontrolü yapar.
  • Product Service, Product Database’de stok mevcudiyetini kontrol eder.
  • Eğer stok mevcutsa:
    • Product Service, Product Database’de stoku ayırır.
    • Product Service, Product Service Sidecar’a “Stock Reserved” (Stok Ayrıldı) olayını yayınlar.
    • Product Service Sidecar, RabbitMQ’ya “Stock Reserved” olayını yayınlar.
    • RabbitMQ, “Stock Reserved” olayını Order Service Sidecar’a iletir.
    • Order Service Sidecar, Order Service’e stok ayrıldığını bildirir.
  • Eğer stok mevcut değilse:
    • Product Service, Product Service Sidecar’a “Stock Unavailable” (Stok Mevcut Değil) olayını yayınlar.
    • Product Service Sidecar, RabbitMQ’ya “Stock Unavailable” olayını yayınlar.
    • RabbitMQ, “Stock Unavailable” olayını Order Service Sidecar’a iletir.
    • Order Service Sidecar, Order Service’e stok mevcut olmadığını bildirir.
    • Order Service, Order Database’de siparişin durumunu “Cancelled” (İptal Edildi) olarak günceller.
    • Order Service, Order Service Sidecar’a “Order Cancelled” (Sipariş İptal Edildi) olayını yayınlar.
    • Order Service Sidecar, RabbitMQ’ya “Order Cancelled” olayını yayınlar.
    • RabbitMQ, “Order Cancelled” olayını User Service Sidecar’a iletir.
    • User Service Sidecar, User Service’e ayrılan krediyi serbest bırakmasını söyler.
    • User Service, User Database’de ayrılan krediyi serbest bırakır.
    • Order Service, Ingress’e “Stock Unavailable - Order Cancelled” (Stok Mevcut Değil - Sipariş İptal Edildi) yanıtını döndürür.
    • Ingress, Client’a yanıtı iletir.

Ödeme İşleme:

Ödeme İşleme

  • Order Service, Order Database’de siparişin durumunu “Processing Payment” (Ödeme İşleniyor) olarak günceller.
  • Order Service, Order Service Sidecar’a “Process Payment” (Ödeme İşle) olayını yayınlar.
  • Order Service Sidecar, RabbitMQ’ya “Process Payment” olayını yayınlar.
  • RabbitMQ, “Process Payment” olayını Order Service Sidecar’a iletir.
  • Order Service Sidecar, Order Service’e ödemeyi işlemesini söyler.
  • Order Service, Order Database’de siparişin durumunu “Payment Processed” (Ödeme İşlendi) olarak günceller.
  • Order Service, Order Service Sidecar’a “Payment Processed” (Ödeme İşlendi) olayını yayınlar.
  • Order Service Sidecar, RabbitMQ’ya “Payment Processed” olayını yayınlar.

Teslimat Başlatma:

Teslimat Başlatma

  • RabbitMQ, “Payment Processed” olayını Dispatch Service Sidecar’a iletir.
  • Dispatch Service Sidecar, Dispatch Service’e Dispatch Order Saga’yı başlatmasını söyler.
  • Dispatch Service, Dispatch Database’de bir teslimat kaydı oluşturur.
  • Dispatch Service, Dispatch Service Sidecar’a “Order Dispatched” (Sipariş Teslimata Çıktı) olayını yayınlar.
  • Dispatch Service Sidecar, RabbitMQ’ya “Order Dispatched” olayını yayınlar.

Siparişin Tamamlanması:

Siparişin Tamamlanması

  • RabbitMQ, “Order Dispatched” olayını Order Service Sidecar’a iletir.
  • Order Service Sidecar, Order Service’e siparişin teslimata çıktığını bildirir.
  • Order Service, Order Database’de siparişin durumunu “Completed” (Tamamlandı) olarak günceller.
  • Order Service, Order Service Sidecar’a “Order Completed” (Sipariş Tamamlandı) olayını yayınlar.
  • Order Service Sidecar, RabbitMQ’ya “Order Completed” olayını yayınlar.
  • RabbitMQ, “Order Completed” olayını Product Service Sidecar’a iletir.
  • Product Service Sidecar, Product Service’e stok seviyelerini güncellemesini söyler.
  • Order Service, Ingress’e sipariş tamamlandı yanıtını döndürür.
  • Ingress, Client’a yanıtı iletir.