Skip to content

Mehmteren/Commerical_Project

 
 

Repository files navigation

🛒 E-Commerce Microservices with SAGA Pattern

.NET MassTransit PostgreSQL Redis RabbitMQ Docker Swagger

---

📖 Hakkında

Bu proje, mikro servis mimarisi ve SAGA Pattern kullanarak geliştirilmiş bir e-ticaret sistemidir. Sipariş oluşturma süreci orkestrasyon yaklaşımı ile yönetilmektedir.


🏗️ Proje Mimarisi

Servis Açıklama
Basket.API Kullanıcı sepet işlemlerini yönetir. Redis üzerinde sepet verilerini depolar.
Stock.API Ürün stok kontrolü ve stok yönetiminden sorumludur.
Payment.API Ödeme işlemlerini gerçekleştirir.
Order.API Sipariş oluşturma ve yönetimini sağlar.
Users.API Kullanıcı bilgilerini yönetir.
Product.API Ürün bilgilerini yönetir.
SagaStateMachine.Service SAGA orchestrator görevi görür, tüm mikroservisler arasındaki işlem akışını yönetir.
Shared Mikroservisler arası iletişim için paylaşılan eventler ve mesajların bulunduğu kütüphanedir.

🚀 Kullanılan Teknolojiler

Teknoloji Açıklama
.NET 8.0 Ana framework
Entity Framework Core ORM & Database Migration
PostgreSQL Ana veritabanı
Redis Sepet verilerinin depolanması
RabbitMQ Message Broker
MassTransit Message Bus implementasyonu
Swagger API dokümantasyonu
Docker Containerization

⚙️ Kurulum

Gereksinimler

  • .NET 8.0 SDK
  • Docker Desktop
  • Visual Studio
  • PostgreSQL (lokal ya da Docker container)
  • Redis (Docker container)
  • RabbitMQ

Docker Servislerini Başlat

# Redis
docker run --name redis-microservices -p 6379:6379 -d redis

Proje Ayarları

  • Her mikroservisin appsettings.json dosyasında kendi bağlantı dizelerini güncelleyin:
  • Her mikroservis için veritabanı migration işlemlerini gerçekleştirin:
{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.Hosting.Lifetime": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "ConnectionStrings": {
    "Redis": "127.0.0.1:1453"
  },
  "RabbitMQ": "amqps://<username>:<password>@<your-host>/<vhost>",
  "AllowedHosts": "*"
}

Her servis için Package Manager Console'da:

Update-Database

Not: Stock.API için migration işlemine gerek yoktur, proje ilk çalıştırıldığında otomatik olarak tablolar oluşturulacak ve örnek veriler eklenecektir.

🚀 Projeyi Çalıştırma

Docker'ın çalıştığından emin olun. Visual Studio'da projeyi çalıştırın (F5 veya Ctrl+F5). Swagger UI üzerinden API endpointlerini test edebilirsiniz.

📚 Mimari Notlar

Redis Kullanımı Basket.API, sepet verilerini Redis üzerinde depolar. Bu, yüksek performanslı ve geçici veri depolama sağlar. SAGA Pattern Proje, dağıtık işlemleri yönetmek için SAGA Pattern kullanmaktadır. SagaStateMachine.Service, tüm işlem akışını orkestre eder ve herhangi bir hata durumunda telafi edici işlemleri (compensating transactions) tetikler. Event-Driven Mimari Mikroservisler arası iletişim RabbitMQ üzerinden event-driven yaklaşımla sağlanmaktadır. MassTransit kütüphanesi, event yayınlama ve tüketme işlemlerini yönetmektedir.

🔄 SAGA Akış Detayları

Projemiz, dağıtık işlemleri yönetmek için Orkestrasyon tabanlı SAGA Pattern kullanır. Tipik bir sipariş akışı şu adımlardan oluşur:

,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,?

🔄 SAGA Pattern Akış Detayları Bu proje Orkestrasyon tabanlı SAGA Pattern ile çalışmaktadır. Tipik bir sipariş süreci:

✅ Başarılı Akış Kullanıcı sepete ürün ekler → ProductAddedToBasketRequestEvent

Stok kontrolü yapılır → StockReservedEvent

Ödeme başlatılır → PaymentCompletedEvent

Sipariş verisi kaydedilir → OrderCompletedEvent

Stok kalıcı olarak azaltılır → StockReducedEvent

❌ Hatalı Senaryolar Stok Yetersiz: StockNotReservedEvent → Sipariş iptali ve kullanıcı bilgilendirmesi

Ödeme Başarısız: PaymentFailedEvent → Rezerve edilen stok geri alınır

OrderFailEvent ile işlem sonlandırılır

🛠️ Geliştirme Notları Redis: Geçici ama hızlı veri saklama için kullanıldı (Basket API).

RabbitMQ + MassTransit: Tüm event akışı ve mikroservis haberleşmesi için kullanıldı.

SagaStateMachine.Service: Süreçleri orkestre eder, hata yönetimini sağlar.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C# 100.0%