Skip to content

it contains necessary information about Microservice Project

Notifications You must be signed in to change notification settings

emreakturk1125/MicroServiceExample2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 

Repository files navigation

-------------------MicroServiceExample2---------------------

Info1

Microservis te uygulamalar (IIS Express) den değilde, (Course.Services.Catalog) Kestrel sunucusu üzerinden kaldırılmalıdır

Info2

Container larımız ve images larımız yönetmek için "PORTAINER" (Community Edition) arayüzünü kullandık

  • Kurum Cmd de;
    • adım => "docker volume create portainer_data"
    • adım => "docker run -d -p 8000:8000 -p 9000:9000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest"
    • http://localhost:9000/#!/init/admin üzerinden arayüze bağlanılabilir
    • User : admin, Password : admin123456789
    • Portainer üzerinden Docker Hub a gitmeden istenilen container çekilebilir. Ör : "Mongo" yazıp çekebilirsin

Info3

("Docker Desktop" ve "Portainer") aynı işe yarar

--------------- Course.Services.Catalog ------------------

  • .Net 5.0
  • Database : MongoDb, ("MongoDB.Driver" kütüphanesi kurulmalı) ve Docker Container olarak ayağa kaldırılacak
  • appsettings.json içinde "launchBrowser": false, // False olması Proje ayagağa kalkarken default olarak bir tarayıcı ayağa kalmaması içindir
  • appsettings.json içinde "applicationUrl": "http://localhost:5011", // 5011 portundan ayağa kalksın dedik

------------------ Course.Shared --------------------

  • .Net 3.1 olarak create etme sebebimiz, Identity Server kullanağız 3.1 den sonraki sürümler ücretli olduğu için Identity Server api si de 3.1 olacak ve bu projeninde kullancağı modeller [Course.Shared] içinde olacağı için [Course.Shared] da 3.1 olarak create ettik

------------------ Course.IdentityServer --------------------

  • Database : SqlServer,
  • Identity Server kütüphanesi Token işlmeleri için kullanılan kütüphanedir
  • Kurulum;
    1. adım => cmd de "dotnet new -i identityserver4.templates" hazır bir identity projesi oluşturulur
    2. adım identity server projesini eklieyceğimiz dizini cmd de açtıktan sonra "dotnet new is4aspid --name Course.IdentityServer" yazıp enter
      ör:"C:\Users\emre.akturk\source\repos\EAMicroservices\IdentityServer>dotnet new is4aspid --name Course.IdentityServer"
    3. adım işlemin devamında çıkan soruya db migration işlemini kendimiz yapacağımız için "n" yani no dedik
    4. Portainer üzerinden Docker Hub a gitmeden istenilen container çekilebilir. Ör : "sql" yazıp çekebilirsin
    5. windows authentication ile girdik
    6. Identity Server endpointlerini görmek için https://localhost:5001/.well-known/openid-configuration

------------------ Course.Services.PhotoStock --------------------

  • Database yok sadece Fotoğraf kaydetmek ve silmek için wwwroot içerisine

------------------ Course.Services.Basket --------------------

  • Database : Redis

------------------ Course.Services.Discount --------------------

  • Database : PostgreSQL (user:admin, password:Password12*)
  • ORM : Dapper (Micro ORM) => Herhangibir db ile kullanılabilir (Dapper.Contrib kütühanesi kullanıldı)

----------------- Dapper & EntityFramework farkı ---------------

  • Dapper'da SQL sorgularını kendiniz yazarsınız. EF'de ise sql sorguları yerine LINQ sorguları yazılır ve bu LINQ sorgularını framework sql sorguarına çevirir
  • Dapper memory'de çalışmaz, ama ef de yapılan crud işlemleri memory de tutulur (AsNoTracking özelliğini kapatılmaz ise) en son SaveChanges() metodu ile işlem tamamlanır

------------------ Course.Services.Order --------------------

  • Database : SqlServer,
  • ORM : EF COre
  • MediatR ######??? araştır ######
  • AutoMapper
  • MassTransit
  • Domain Driven Design yaklaşımı
  • CQRS pattern ######??? araştır ######
  • Onion Mimarisi (merkezden(içten) dışa doğru giden bir yapıdır)
    => En temelde bütün business olduğu "Domain" katmanı vardır. İçerisinde (Entity, Value Objects, Domain Events, Aggregate Root)
    * Entity : Kendisine ait unique değeri olan yapılar (Entity classları gibi)
    * Value Object : Kendisine ait unique değeri olmayan yapılar (Uniqe değeri olmayan property lerin olduğu classları gibi)
    * Aggregate Root : bir biri ile alakalı entity'lerin bir arada bulunmasıdır.
    => Bir üst katman "Repositories" (domain katmanını üstü)
    => Bir üst katman "Application" Services (repositories katmanını üstü)
    => Bir üst katman ise "UI" katmanıdır
  • Proje Yapısı;
    => Presentation (UI'a karşılık)
    => Application (Application services'e karşılık)
    => Domain (Domain'e karşılık)
    => Infrastructure (Repository'e karşılık)

----------------- Domain Driven Design Nedir -------------------

  • DDD : Projelerimizdeki karmaşıklığı çözmemize, sürdürülebilir olmasını sağlamaya yarayan bir yaklaşımdır
  • Çok fazla business kurallarını olduğu ve böylece karmaşıklığında olduğu durumlar için DDD yaklaşımı gerekli olabilir. Temel CRUD işlemlerinin olduğu durumlarda tercih edilmemelidir

DDD içerisinde kullanılan yapılar;

  • Ubiquitous Language (Heryerde geçerli ortak dil, isim)
  • Bounded Context (Gruplanmış, parçalanmış ya da izole edilmiş ve birbiri ile ilişkisi olan yapılardır)
    => Bounded Context İzolasyon seviyeleri de mevcuttur.
    1.) Dosya (Folder) seviyesinde tutulursa. (1. Seviye)

    2.) Class library seviyesinde tutulursa. (2. Seviye)

    3.) Her bounded context için ayrı bir microservice oluşturmak (3. seviye)
    => Bounded Context ler birbirleri ile "Domain Events" ler vasıtasıyla haberleşirler. Yani Event fırlatılır diğerleri de dinler
    => 1. ve 2. seviye Bounded Context durumlarında (Monolitik bir uyuglama içerisinde ise contextler) haberleşme Event Fırlatılarak yapılır
    => 3. seviye yani microservis mimarisinde ise Event Bus lar kullanılarak haberleşme sağlanır

----------------------- CQRS Pattern ----------------------------

  • (Query ve Command ların birbirlerinden ayrılmasıdır.) Veritabanına yapılacak query ler ile insert, update, delete işlemlerinin birbirinden ayrılmasıdır.
  • CQRS implementasyonu için MediatR kütüphanesi kulllanılır.

------------------ Course.Services.FakePayment --------------------

  • Rastgele bie requeste göre response dönen ödeme servisi

----------------- API GATEWAY ------------------

  • Herhangibir client servislere direk erişmek yerine ApiGateway üzerinde erişir
  • Ocelot kütüphanesi kullanılır
  • Authorization, Caching, Logging, Rate Limit, Load Balanced işlmeleri yapılabilir

About

it contains necessary information about Microservice Project

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published