Mikroservis mimarisi ile yazılan bu proje, otel yönetimi ve raporlama işlemleri için iki mikroservis içermektedir. Mikroservisler arasında RabbitMQ aracılığıyla iletişim sağlanmaktadır. HotelService, otel ve iletişim bilgilerini yönetirken, ReportService, konum bazlı raporları asenkron olarak üretir.
- Otel Yönetimi: Otel oluşturma, kaldırma, iletişim bilgisi ekleme, iletişim bilgisi kaldırma, Otel yetkililerinin listelenmesi, Otel ile ilgili iletişim bilgilerinin de yer aldığı detay bilgilerin getirilmesi
- Raporlama: Konum bazlı raporlar (otel sayısı, telefon numarası sayısı).
Uygulama, RabbitMQ kullanarak mikroservisler arasında asenkron veri iletimi sağlar. HotelService, ReportService'e rapor talepleri gönderirken RabbitMQ kullanır ve ReportService, gelen talepleri asenkron olarak alıp işler.
HotelService, rapor taleplerini RabbitMQ'ya gönderir. Kullanıcı bir rapor talep ettiğinde, HotelService bu talebi RabbitMQ kuyruğuna gönderir. Bu işlem, ReportRequestedEvent adıyla yapılan bir mesajlaşma ile gerçekleşir.
- Backend Framework:
.NET Core 9 MongoDB: ReportServicePostgreSQL: HotelService- Mesajlaşma Sistemi:
RabbitMQ - Loglama ve İzleme:
ELK Stack(Elasticsearch, Kibana) - API Gateway:
Ocelot - Containerization:
Docker Compose
Domain-Driven-Design, Event-Driven-Architecture, CQRS, Mediator, Generic Repository, UnitOfWork
docker-compose.yaml içerisinde yazılan image'ler ile PostgreSQL ve ELK Stack kurulumları yapabilirsiniz, proje de RabbitMQ ve MongoDB Cloud tarafında kullanılmaktadır. appsettings.json içinde konfigürasyonlardan bakabilirsiniz.
Proje konumundan
docker-compose up -dkomutu ile servisleri ayağa kaldırabilirsiniz, HotelService içinde ki PostgreSQL konfigurasyonu
"PostgreSqlConnection": "Host=localhost;Port=5432;Database=neredekalHotelDb;Username=poisondev;Password=poisondevdocker"Gateway localhost:5284 dizini üzerinde ki swagger dökümanı ile Service dökümanları arası geçiş yapabilirsiniz
Configure Startup Project'den Gateway.API HotelService.API ve ReportService.API projelerine Start verip projeyi ayağa kaldırabilirsiniz.
-
Gateway => 5284
-
HotelService.API => 5284
-
Gateway => 5055
-
ReportService.API => 5284
-
PostgreSQL => 5284 - ElasticSearch => 9200 - Kibana => 5601
Solution Structure
neredekalcase
│
├── src/
│ ├── Gateway/
│ │ ├── Gateway.API
│ │ └── Dockerfile
│ │
│ ├── HotelService/
│ │ ├── HotelService.API
│ │ ├── HotelService.Application
│ │ ├── HotelService.Domain
│ │ ├── HotelService.Infrastructure
│ │ └── HotelService.Shared
│ │ └── Dockerfile
│ │
│ ├── ReportService/
│ │ ├── ReportService.API
│ │ ├── ReportService.Application
│ │ ├── ReportService.Domain
│ │ ├── ReportService.Infrastructure
│ │ └── ReportService.Shared
│ │ └── Dockerfile
│ │
│ ├── UI/
│ │ ├── WebUI.Client (Blazor WebAssembly UI)
│ │ ├── WebUI.Shared
│ │ └── Dockerfile
│
├── common/
│ ├── SharedKernel (RabbitMQ, BaseEntity)
│ └── EventBus (RabbitMQ, MediatR vb)
│
├── tests/ (UnitTest, IntegrationTest)
│ ├── Gateway.Tests
│ ├── HotelService.Tests
│ └── ReportService.Tests
│
├── docker-compose.yml
│
├── README.md
└── .gitignore





