Bu repo; OrderApi üzerinden “satın alma” çağrısı alıp, PaymentApi ile basit ödeme doğrulaması yapan ve ödeme başarılıysa RabbitMQ’ya event publish ederek iki ayrı subscriber’ın (mail + stok) çalıştığı bir pub/sub örneğidir.
- RabbitMQ: Event exchange + queue’lar
- Management UI:
http://localhost:15672(user/pass:guest/guest)
- Management UI:
- PaymentApi:
POST /payments/charge(demo ödeme) - OrderApi:
POST /orders/purchase(satın alma) - EmailWorker:
OrderPaidevent’ini tüketir, “mail gönderildi” diye loglar - StockWorker:
OrderPaidevent’ini tüketir, in-memory stok düşürür ve loglar
- Satın alma isteği: Sen
OrderApi’yePOST /orders/purchaseçağırırsın. - Ödeme çağrısı:
OrderApi,PaymentApi’yePOST /payments/chargeisteği atar. - Ödeme sonucu:
amount > 0isePaymentApi200 OK döndürür.amount <= 0isePaymentApi400 döndürür.
- Event publish (sadece ödeme başarılıysa):
OrderApi, RabbitMQ’yaOrderPaidevent’ini JSON olarak publish eder.- Exchange:
ecommerce.events(type: topic) - Routing key:
order.paid - Mesaj:
Contracts/OrderPaid
- Exchange:
- Subscriber’lar:
- EmailWorker:
email.orderpaidqueue’sunu exchange’e bind eder,OrderPaidgelince “Mail sent …” loglar. - StockWorker:
stock.orderpaidqueue’sunu exchange’e bind eder,OrderPaidgelince stok düşürür (in-memory) ve loglar.
- EmailWorker:
Not: Worker’lar ve OrderApi tarafında RabbitMQ bağlantısı için retry/backoff vardır; RabbitMQ hazır olmadan kapanmamalıdır. Ayrıca docker-compose.yml içinde RabbitMQ healthcheck vardır.
docker compose up --buildLogları izlemek için:
docker compose logs -f orderapi paymentapi emailworker stockworkerIDE HTTP dosyaları:
src/OrderApi/OrderApi.http(purchase success/fail)src/PaymentApi/PaymentApi.http(charge success/fail)
Akışı görmek için en temel adım: src/OrderApi/OrderApi.http içindeki Purchase (success) request’ini gönderip worker loglarını izlemek.