🧵 .NET Core ile Mikroservis Mimarisi RabbitMQ ve PostgreSQL Tabanlı E-Ticaret Altyapısı
14 Mayıs 2025
🚀 Giriş
Bu yazıda, .NET Core kullanarak geliştirdiğim mikroservis tabanlı bir e-ticaret altyapısı projesini tanıtacağım.
Proje kapsamında RabbitMQ ile servisler arası mesajlaşma, PostgreSQL ile veri yönetimi, Docker ile konteynerleştirme, EF Core + Repository yapısıyla veri katmanı soyutlaması, Outbox Pattern, Retry, Logging, Swagger, ve Unit Test gibi önemli kavramlara da yer verildi.
🧱 Projenin Bileşenleri
✅ Sipariş Servisi (OrderService)
- Sipariş oluşturur ve RabbitMQ üzerinden event fırlatır.
- Veritabanı: PostgreSQL
- Event: OrderCreatedEvent
- Outbox Pattern ile event'leri transactional olarak kuyruğa gönderir.
✅ Stok Servisi (StockService)
- OrderCreatedEvent'i alır, ürün stoklarını günceller.
- Repository pattern ile veri erişimi soyutlanmıştır.
- Unit test ile test edilmiştir.
✅ Bildirim Servisi (NotificationService)
- Sipariş bilgisine göre SMS ve e-posta gönderir.
- MailKit ile SMTP üzerinden gerçek e-posta gönderimi yapılır.
- Bildirim log'ları ayrı bir tabloda tutulur.
📬 RabbitMQ Kullanımı
- Servisler arası mesajlaşma için fanout exchange ve topic exchange birlikte ele alındı.
- OrderExchange üzerinden publish edilen mesajlar StockService ve NotificationService tarafından paralel olarak işlenebiliyor.
- DLQ (Dead Letter Queue) altyapısı da hazır hale getirildi.
🧰 Kullanılan Teknolojiler
Katman |
Teknoloji |
API / Servis |
ASP.NET Core 9, MediatR |
Veri |
PostgreSQL + EF Core |
Mesajlaşma |
RabbitMQ (Exchange, Queue, DLQ) |
DI / Logging |
ILogger, Scoped Service |
Container |
Docker, Docker Compose |
Test |
xUnit, Moq, FluentAssertions |
UI |
Swagger (development modda) |
🔁 Outbox Pattern
OrderService, event’leri doğrudan RabbitMQ’ya publish etmek yerine önce OutboxMessages tablosuna yazar.
Sonrasında bir BackgroundService bu mesajları düzenli olarak okuyup kuyruklara publish eder. Bu sayede:
- Transactional consistency sağlanır
- Event kaybı önlenir
- Retry yapılabilir
🛠️ Swagger ve Geliştirici Deneyimi
Her servis kendi Swagger UI arayüzü ile test edilebilir:
Servis |
Swagger URL |
OrderService |
|
StockService |
|
NotificationService |
🧪 Test Altyapısı
Her servis için:
- Handler sınıflarına özel birim testler
- Repository mock'lama
- ILogger mock kontrolü
- FluentAssertions ile okunabilir assertion'lar
📦 Docker & Compose
Tüm yapı docker-compose.yml ile yönetilir.
docker compose up --build
İlgili portlar dışarı açılmıştır:
- PostgreSQL: 5432
- RabbitMQ Management: 15672
- API'ler: 5001, 5002, 5003
📌 Sonuç
Bu proje, mikroservis mimarisiyle modern bir .NET altyapısının tüm yapı taşlarını içeren örnek bir e-ticaret platformudur.
Projenin GitHub bağlantısı aşağıda:
Yorumlar