• Anasayfa
  • Eğitimler
    • JavaScript Eğitimi
    • Angular 2 Eğitimi
    • React.js Eğitimi
    • Java 8 Eğitimi
    • Java EE 7 Eğitimi
    • Spring Framework Eğitimi
    • Git Eğitimi
  • Online Eğitimler
    • Online React.js Eğitimi
    • Online Angular 2 Eğitimi
    • Online Spring Boot Eğitimi
  • Referanslar
  • Hakkında
  • İletişim
KodEdu
  • Anasayfa
  • Eğitimler
    • JavaScript Eğitimi
    • Angular 2 Eğitimi
    • React.js Eğitimi
    • Java 8 Eğitimi
    • Java EE 7 Eğitimi
    • Spring Framework Eğitimi
    • Git Eğitimi
  • Online Eğitimler
    • Online React.js Eğitimi
    • Online Angular 2 Eğitimi
    • Online Spring Boot Eğitimi
  • Referanslar
  • Hakkında
  • İletişim

Spring Cloud Netflix ve Eureka Service Discovery

  • Posted by Mustafa Demir
  • Categories Cloud, Genel
  • Date 3 Temmuz 2017

Merhabalar. Spring Cloud Netflix yazı serimizin 2.’ si olan Ekreuka Service Discovery yazısı ile tekrar karşınızdayım. Hatırlayacağınız üzere serinin ilk yazısı olan Spring Cloud Netflix’ e Giriş yazısında, Spring Cloud’ dan kısaca bahsettikten sonra, Spring Source’ un Spring Cloud ve Spring Cloud Netflix başlığı altında kendisi ile entegre bir şekilde kullanımımıza sunduğu Netflix OSS araçlarına yüzeysel olarak değinmiş ve bu araçların hangi problemlere nasıl çözüm sunduklarını görmüştük. Şimdi ise serinin 2. yazısına konu olan Eureka Service Discovery aracına, kullanım amacına değindikten sonra küçük bir örnek yapacapız.

Adından da anlaşılacağı üzere Eureka bir service discovery aracı, ancak Eureka sadece ön tanımlı bir ortama (kendisine) kaydedilmiş olan servisleri bulmakla kalmayıp, servislerimizi ilgili ortama kayıt etme sorumluluğunu da Eureka Client modülü ile üstlenebilmektedir.

Eurekanın işleyiş şeklini kısaca özetlemeye çalışırsak; biz servislerimizi (microservices) Eureka Client olarak tanımlıyoruz, bu tanımlama işlemi bir notasyon eklemek kadar basittir, ve clientlar properties,yml ya da java konfigürasyonu ile kendilerine tanımlanmış olan ‘Eureka Server’ dediğimiz ortama kendilerini kaydediyorlar, daha sonra bir servise ihtiyacı olan bir diğer servis ulaşmak istediği servisin bilgilerini Eureka Server’ dan alabiliyor ve servislerimizin IP, port vs gibi bilgilerini bir yerde tutmak zorunda kalmıyoruz.

Şimdi dilerseniz Eureka Server’ ı yazmaya başlayalım. Ide üzerinden Spring Boot projesi oluştutuyoruz ve proje bağımlılıklarını Web ve Eureka Server olarak seçiyoruz.


<dependencies>
     <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-eureka-server</artifactId>
     </dependency>
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
     </dependency>

     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-test</artifactId>
         <scope>test</scope>
     </dependency>
</dependencies>	

Projemizin bağımlılıkları yukarıdaki şekildeki gibi olup, projemizi ayağa kaldıracak olan ve içerisinde main fonksiyonu bulunan sınıfımıza aşağıdaki şekilde @EnableEurekaServer notasyonunu ekliyoruz.


package com.kodedu.springcloudnetflix.eurekaserver;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {

	public static void main(String[] args) {
		SpringApplication.run(EurekaServerApplication.class, args);
	}
}

Projemizin application.properties dosyası ise aşağıdaki şekilde olacaktır.

server.port=8761
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false

Yukarıdaki tanımlamada, ilk satır embedded tomcat’ in yani servlet container’ ın hangi porttan hizmet vereceğini belirtir. Diğer iki satır ise, bu uygulama Eureka Server olacağı için, uygulamanın client gibi davraıp register olacak bir Eureka Server aramsını önlemek amacıyla tanımlanmıştır.

Uygulamamızı build edip, çalıştırıp ardından localhost:8761/ adresini tarayıcımızdan açtığımızda bizi aşağıdaki resimde de görülmekte olan Eureka ekranı karşılamaktadır.

Bu ekrandan, Eureka Server’ a kayıt olan servislerimizin yani Eureka Client’ ların listesini, replikaları ile birlikte görebilmekle beraber, Eureka Server’ ın yani uygulamanın kendisine ait, internal IP, uygulama durumu, bellek kullanımı, replikaları vs gibi birtakım bilgilere de ulaşabilmekteyiz.

Şimdi de Eurela Client olarak davranacak bir Spring Boot projesi daha oluşturalım.

Projemizin bağımlılıklarında bir değişiklik olmayacak yani Eureka Server projesinin bağımlılıklarını kullanabiliriz.

Uygulamamızı ayağa kaldıracak olan ve main metodu içeren sınıfımız aşağıdaki şekilde olacaktır.


package com.kodedu.springcloudnetflix.eurekaserver;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@SpringBootApplication
@EnableEurekaClient
public class EurekaClientApplication {

	public static void main(String[] args) {
		SpringApplication.run(EurekaClientApplication.class, args);
	}
}

@EnableEurekaClient notasyonu, Spring context’  i ayağa kalkarken, application.properties dosyasında tanımlanan konfigürasyonların yüklenmesini sağlayacaktır.

Şimdi de application.properties dosyamıza bakalım.


server.port=4444
spring.application.name=demo-eureka-client
eureka.client.service-url.defaultZone: ${EUREKA_URI:http://localhost:8761/eureka}

Eureka, Zuul ile birlikte kullanıldığında uygulamalar arası yönlendirmeler için zuul spring.application.name bilgisini kullanarak, ilgili uygulamanın adresini Eureka Server’ dan alır, bu nedenle bu tanımlama önemlidir.

eureka.client.service-url.defaultZone  tanımlaması, Eureka Client olarak davranacak olan uygulamamızın, kayıt olacağı Eureka Server’ ın adresidir. Yukarıdaki tanımlamada, uygulama çalıştırılırken EUREKA_URI parametresi geçilirse bu bilgiyi kullanmasını aksi takdirde, varsayılan olarak http://localhost:8761/eureka adresini kullanmasını uygulamamıza söylemiş oluyoruz.

Eureka Client’ı da ayağa kaldırdıktan sonra, http://localhost:8761/ adresini tekrar ziyaret edelim ve server’ a register olan instance’ ı görelim.

Yukarıdaki ekran görüntüsünde de görüleceği üzere DEMO-EUREKA-CLIENT adında, ip ve port bilgilerini görmekte olduğumuz bir Eureka Client instance vardır. IP:applicationName:port yazısının olduğu linke tıkladığımızda client uygulamamızın /info enpointine gidilir ve buradan Spring Actuator’ un bize sağlamış olduğu bilgilere (mapping, health, status vs.) ulaşılabilir.

Tag:eureka, netflix, service discovery, spring cloud

  • Share:
author avatar
Mustafa Demir

Süleyman Demirel Üniversitesi Bilgisayar Mühendisliği 4. sınıf öğrencisiyim. Java ve Java teknolojilerini sevmekle beraber Spring ekosistemine aşığım.

Mikroservisler ve beraberinde gelen DevOps işleri ile uğraşmayı seviyorum.

Saha Bilgi Teknolojileri şirketinde Junior Java Developer olarak çalışmaktayım.

Previous post

Online React.js Eğitimi ardından (15-25 Mayıs 2017)
3 Temmuz 2017

Next post

Spring CLI ile Spring Boot Projeleri Hazırlamak
21 Ağustos 2017

You may also like

api-logo
Swagger Nedir? Neden kullanılır?
10 Ekim, 2018
spring-cli-logo
Spring CLI ile Spring Boot Projeleri Hazırlamak
21 Ağustos, 2017
react-js-egitim
Online React.js Eğitimi ardından (15-25 Mayıs 2017)
31 Mayıs, 2017

    2 Comments

  1. İlkay
    23 Ağustos 2017
    Cevapla

    Merhaba,
    Paylaştığınız bilgiler için teşekkürler. Client’ın sunucudan diğer client’lara nasıl ulaştığını ve “single point of failure”‘ı önlemek için nasıl “cluster” yapıldığından da bahsetseniz bu konuda referans olacak Türkçe bir kaynak olur yazınız.

  2. Mustafa Demir
    26 Ağustos 2017
    Cevapla

    Yorum için teşekkür ederim. Dikkate alıp, güncelleyeceğim.

Leave A Reply Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta listesine kayıt olun!






Gözde yazılar

Hafif bir Kod Editörü – Brackets
30Haz2012
Java’da Record’lar
27Oca2020
Reflection ile Dependency Injection nasıl gerçekleştirilir?
04Eyl2012
Integration of Spring MVC and Mustache
02Ağu2013

Son Yazılar

  • Java’da Record’lar 27 Ocak 2020
  • Swagger Nedir? Neden kullanılır? 10 Ekim 2018
  • Spring CLI ile Spring Boot Projeleri Hazırlamak 21 Ağustos 2017
  • Spring Cloud Netflix ve Eureka Service Discovery 3 Temmuz 2017
  • Online React.js Eğitimi ardından (15-25 Mayıs 2017) 31 Mayıs 2017

Son Yorumlar

  • Coupling ve Cohesion Kavramları Nedir? için Hilal
  • Naïve Bayes Sınıflandırma Algoritması için Rahman Usta
  • Naïve Bayes Sınıflandırma Algoritması için Mete
  • YAML Nedir? Neden YAML Kullanmalıyız? için kara
  • JWT (JSON Web Tokens) Nedir? Ne işe yarar? için Furkan

Get Java Software

Arşivler

Bizi takip edin

React.js Eğitimi Başlıyor
11-22 Eylül, 2017
Eğitmen
Rahman Usta
İletişim

merhaba@kodedu.com

  • Hakkında
  • Gizlilik Politikası
  • İletişim
  • Referanslar
Kodedu Bilişim Danışmanlık
Cemil Meriç mah. Çelebi sok.
No:16/3 Ümraniye/İSTANBUL
Tel: 0850 885 38 65
Alemdağ V.D.: 8960484815

KODEDU © Tüm hakları saklıdır.