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.
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. |
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 |
- .NET 8.0 SDK
- Docker Desktop
- Visual Studio
- PostgreSQL (lokal ya da Docker container)
- Redis (Docker container)
- RabbitMQ
# 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": "*"
}
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.
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.