🧵 .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

http://localhost:5001/swagger

StockService

http://localhost:5002/swagger

NotificationService

http://localhost:5003/swagger


🧪 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:

👉 GitHub – ECommerceCase

 

Yorumlar
Sitenizden gelir elde etmeye hazır mısınız?
Benim de kullandığım reklam platformu: Monetag
Monetag’e Göz At 🚀