Skip to content

Aplikacja backednowa sklepu AGD zaimplementowana w architekturze mikroserwisowej zgodnie z Clean Architecture, DDD, CQRS. Mikroserwisy zaimplementowane w ASP.NET Core Web API, użyte różne SQL/NoSQL rozwiązania dla poszczególnych serwisów. Został zaimplementowany API Gateway oraz dodany broker wiadomości RabbitMQ do asynchronicznej komunikacji.

License

Notifications You must be signed in to change notification settings

Kowjako/MicroservicesAGD

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

72 Commits
 
 
 
 
 
 
 
 

Repository files navigation

💍 Aplikacja backendowa sklepu AGD

Aplikacja backednowa sklepu AGD zaimplementowana w architekturze mikroserwisowej zgodnie z Clean Architecture, DDD, CQRS. Mikroserwisy zaimplementowane w ASP.NET Core Web API, użyte różne SQL/NoSQL rozwiązania dla poszczególnych serwisów. Został zaimplementowany API Gateway oraz dodany broker wiadomości RabbitMQ do asynchronicznej komunikacji.

☂️ Architektura aplikacji

microservices-arch

☂️ Clean Architecture, DDD, CQRS

Microserwis Ordering.API został zaimplementowany zgodnie z DDD, CQRS, Clean Architecture. Wyodrębniona wartswa domenowa Ordering.Domain, przedstawiająca klasę bazową dla obiektów wartości (Value Object) oraz encje bazowe. Projekt Ordering.Application przedstawia wartswę Use Cases, czyli tutaj zdefinowane polecenia oraz komendy zgodzine z CQRS (za pomocą MediatR) oraz zdefiniowane kontrakty do warstwy infrastruktury oraz dostępu do danych, które będą potrzebne dla funkcjonowania. Projekt Ordering.Insfrastructure implementuje kontraktry projektu Ordering.Application dotyczące infrastruktury zarówno jak i dostępu do danych. Wartswa prezentacji (Ordering.API) przedstawia wystawione REST API dla użytkowników oraz odpowiada za rejestrację wszystkich zależności w kontenerze Dependency Injection.

☂️ Użyte technologie

  1. ASP.NET Core 6 Web API - trzy serwisy (Basket.API, Ordering.API, Catalog.API) oraz Discount.API - do celów testowych (w rzeczywistości używany projekt to Discount.Grpc,) zaimplementowane za pomocą Web API i wystawiają REST API, pomimo tego każdy serwis ma swój Dockerfile dzięki czemu możemy zbuildować obraz takiego serwisu żeby następnie go umieścić w infrastrukturze Dockerowej (tam launchSettings.json już nie odgrywa żadnej roli więc definiujemy swoje porty w docker-compose.override.yml).
  2. ASP.NET Grpc - serwis zniżek Discount.Grpc jest zaimplementowany jako Grpc serwis (a nie REST API), dzięki temu, nasz Basket.API podczas dodania produktów do koszyka, uderza do Grpc serwisu żeby sprawdzić czy dany artykuł ma zniżkę, gdy tak to zastosuje ją.
  3. Redis, PostgreSQL, SQL Server, MongoDB
  4. Dapper - użyty w Discount.API i Discount.Grpc jako Micro-ORM dla PostgreSQL.
  5. Ocelot Api Gateway - zamiast Nginx, występuje w roli reverse-proxy wystawia swoje API które przekierowuje zapytania do odpowiednich serwisów.
  6. RabbitMQ - broker do asynchronicznej komunikacji między serwisem Basket.API oraz Ordering.API, po zatwierdzeniu koszyka publikujemy zdarzenie do kolejki RabbitMQ, z kolei Ordering.API występuje subskrybentem tego zdarzenia, czyli po zatwierdzeniu koszyka, serwis zamówień odbierze dane zdarzenie oraz utworzy zamówienie na bazie SQL Server.
  7. Docker - cała infrastruktura aplikacji
  8. AutoMapper, MediatR, FluentValidaton, Swagger

☂️ Jak uruchomić aplikację

  1. Mieć zainstalowany Docker Desktop
  2. Uruchomic kontenery:
    docker-compose -f docker.compose.yml -f docker-compose.override.yml up -d
    Następnie nasze serwisy w środowisku docker'a będą dostępne pod kolejnymi portami:

W przypadku potrzeby połączyć się z SQL Server (od Ordering.API) poprzez SSMS, server: localhost,1434 login: sa hasło: Jko3va-D9821jhsvGD

About

Aplikacja backednowa sklepu AGD zaimplementowana w architekturze mikroserwisowej zgodnie z Clean Architecture, DDD, CQRS. Mikroserwisy zaimplementowane w ASP.NET Core Web API, użyte różne SQL/NoSQL rozwiązania dla poszczególnych serwisów. Został zaimplementowany API Gateway oraz dodany broker wiadomości RabbitMQ do asynchronicznej komunikacji.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published