Bir önceki makalemizde Api Gateway’den bahsetmiştik. Okumadıysanız buradan ulaşabilirsiniz. Bu makalemizde ise Microservice mimarisinin olmazsa olmazlarından “service registration” yapısından bahsedeceğiz.
Service discovery yapısı Microservice mimarisinin en büyük sorunlarından monitoring ve management’a çözüm sağlayan bir yapıdır. Microservice tabanlı bir uygulamada, birbirinden bağımsız onlarca servis çalışmaktadır. Hatta bazı servisler birden fazla instance üzerinde sunulmaktadır. Haliyle bu kadar servisden hangileri down hangileri up bilmek isteriz. Bunun yanında hangi servis hangi port üzerinden erişilebilir olduğu da bizim için önemlidir.

Service discovery yapısı tam da bu sorunlarımıza çözüm üretmektedir. Peki bu sorunumuza nasıl çözüm sağlar, bir bakalım.

Microservice mimarisinde service discovery’de diğer servisler gibi hizmet vermektedir. Çalışma prensibi gayet basittir. Microservice’lerimiz ayağa kalkarken (ilk çalışma anında) kendi üzerinde bulunan config’e bakarak tanımlı olan service discovery’e request atarak bağlanır.

Service discovery üzerinde bulunan UI dashboard aracılığı ile kayıt olan service’leri gözlemleyebiliriz. Aşağıdaki örnekte farklı ip ve portlar üzerinden kayıt olmuş servisleri görebilirsiniz.

Bu yapının diğer güzel bir yanı ise birbirinden bağımsız çalışan bu servislerin birbirlerinin ip ve port bilgilerini bilmesine gerek yoktur. Bu servisler üzerinde tanımlı service name’ler (örn: product-service) ile doğrudan haberleşebilmektedirler.

Sunulan servisler üzerinde health check endpoint’leri tanımlayarak sunulan servislerin up veya down kontrollleri de yapılabilmektedir.

Sıkça kullanılan discovery servisleri arasında Eureka ve Consul yer almaktadır. Bir örnek ile anlatılanları pekiştirelim.

Aşağıdaki adrese giderek bir tane Eureka service oluşturalım.

https://start.spring.io/


Maven projesi seçerek Group ve Artifact bilgilerini girelim. Spring Boot versiyonu 2.1.3 seçelim ve “Search dependencies to add” kısmından Eureka Server’ı eklemeyi unutmayalım.

Generate project’e tıklayarak oluşturduğumuz projeyi download edelim. İndirdikten sonra projemizi Eclipse veya herhangi bir ideye import ederek kodları açalım.

application.properties dosyasını aşağıdaki gibi düzenleyelim. Server port kısmında discovery service’i yayınlamak istediğimiz port bilgisini girelim.

EurekaServiceProjectApplication.java dosyasını aşağıdaki gibi düzenleyelim. Burada önemli olan kısım “@EnableEurekaServer” tanımlaması. Bu attribute bilgisi ile service’ imizin Eureka service olarak hizmet vereceğini belirtiyoruz.

Projemizi aşağıdaki komutları kullanarak çalıştıralım.

mvn compilemvn installmvn spring-boot:run

http://localhost:8761 adresinden uygulamaya erişebilirsiniz.

Evet buraya kadar Eureka Discovery service’mizi ayağa kaldırmayı öğrendik. Şimdi bir önceki makalemizde oluşturduğumuz .Net Rest Api projemizi bu service’e register ederek test edelim. İlgili projeye buradanulaşabilirsiniz.Evet buraya kadar Eureka Discovery service’mizi ayağa kaldırmayı öğrendik. Şimdi bir önceki makalemizde oluşturduğumuz .Net Rest Api projemizi bu service’e register ederek test edelim. İlgili projeye buradanulaşabilirsiniz. -LİNKLER-

Product api projemizin içindeki productapi.csproj dosyasına aşağıdaki kütüphaneyi ekleyelim.

<ItemGroup><PackageReference Include="Steeltoe.Discovery.ClientCore" Version= "2.1.0"/></ItemGroup>

Ardından ilgili kütüphanenin yüklenmesi için restore komutunu çalıştıralım.

dotnet restore

Appsettings.json dosyasını aşağıdaki gibi düzenleyelim. İlgili config bilgilerinde servisin bağlanacağı eureka server adresini ve port bilgilerini belirtiyoruz. Ayrınca instance kısmında product service host ve port bilgilerini tanımlıyoruz. HealthCheckUrlPath ve StatusPageUrlPath bilgilerine oluşturduğumuz endpointleri veriyoruz. En önemlisi ise application altında service name tanımlamasını yapmayı unutmuyoruz.

Startup.cs dosyasında using kısmına Discovery.Client’ı ekledik. ConfigureService methoduna ise services.AddDiscoveryClient(Configuration) tanımlamasını yaptıktan sonra Configure methoduna ise app.UseDiscoveryClient() ekledik.
Product api projemizin startup.cs dosyasının son hali aşağıdaki gibidir.

Evet ilgili tanımlamaları tamamladıktan sonra projemizi çalıştıralım.

dotnet run

Şimdi localhost:8761 adresinden eureka UI dashboard’una girdiğimizde product api service’mizin Eureka ya kayıt olduğunu göreceğiz.

https://github.com/akaramanapp/microservice-ocelot?source=post_page

Faydalı olması dileğiyle..

Hoşçakalın.