Articles

Spring Cloud Service Discovery z Netflix Eureka

Dowiedz się, jak tworzyć mikroserwisy w oparciu o Spring cloud, na serwerze rejestru Netflix Eureka i jak inne mikroserwisy (klienci Eureka) używają go do rejestracji i odkrywania usług w celu wywołania ich interfejsów API.

będziemy używać Spring Boot based Spring Cloud API. Użyjemy Netflix Eureka server do budowy serwera rejestru usług i klientów Eureka, którzy zarejestrują się i odkryją inne usługi, aby wywołać interfejsy API REST.

przegląd

stworzymy trzy mikroserwisy dla tego przykładu Netflix Eureka.

  1. Eureka Service Registry Server – Ta mikrousługa zapewni rejestr usług i serwer wykrywania.
  2. Mikroserwis Studencki – dający pewną funkcjonalność opartą na jednostce Studenckiej. Będzie to usługa oparta na odpoczynku, a co najważniejsze będzie to usługa klienta eureka, która porozmawia z eureka service, aby zarejestrować się w rejestrze usług.
  3. Mikrousługa Szkolna – taki sam typ jak w usłudze Studenckiej – dodano tylko, że wywoła usługę studencką z mechanizmem service look up. Nie będziemy używać bezwzględnego adresu URL usługi ucznia do interakcji z tą usługą.

oto schemat interakcji między wyżej wymienionymi trzema usługami.

interakcja komponentów ze sobą

Tech Stack i Runtime

  • Java 1.8
  • Eclipse IDE
  • Spring cloud
  • Spring boot
  • Spring Rest
  • Maven
Table of ContentsWhat is Netflix Eureka Server and Clients?Eureka Service Registry ServerEureka Client - Student ServiceEureka Client - School ServiceDemo of Service Discovery and CallingThings to check if facing any errorSummary

co to jest serwer i klienci Netflix Eureka?

jak wiemy w dzisiejszych czasach, wokół mikroserwisów jest dużo rozmachu. Przejście z architektury monolitycznej na architekturę opartą na Mikroserwisach daje wiele korzyści w przyszłości pod względem łatwości konserwacji, skalowalności, wysokiej dostępności itp. Jednocześnie jednak migracja ta wiąże się z wieloma wyzwaniami. Jednym z nich jest utrzymywanie indywidualnych adresów mikroserwisów. Zadanie to może być bardzo złożone-w zależności od liczby usług i ich dynamicznego charakteru. Jeśli cała infrastruktura jest rozproszona i istnieje również replikacja, utrzymanie tych adresów usług staje się trudniejsze.

aby rozwiązać ten problem, w komputerach rozproszonych istnieje koncepcja o nazwie „rejestracja i wykrywanie usług”, w której jeden serwer dedykowany jest odpowiedzialny za utrzymanie rejestru wszystkich mikrousług, które zostały wdrożone i usunięte. Będzie to działać jak książka telefoniczna wszystkich innych aplikacji / mikrousług.

pomyśl o tym jak o usłudze wyszukiwania, w której mikroserwisy (klienci) mogą się zarejestrować i odkryć inne zarejestrowane mikroserwisy. Kiedy mikroserwis klienta rejestruje się w Eureka, dostarcza metadane, takie jak host, port i wskaźnik stanu, umożliwiając tym samym innym mikroserwisom ich wykrycie. Serwer discovery oczekuje regularnej wiadomości heartbeat z każdej instancji mikrousług. Jeśli instancja zacznie konsekwentnie nie wysyłać bicia serca, serwer discovery usunie instancję z rejestru. W ten sposób będziemy mieli bardzo stabilny ekosystem współpracujących ze sobą mikroserwisów, a ponadto nie musimy ręcznie utrzymywać adresu innej mikroserwisy, co jest zadaniem prawie niemożliwym, jeśli skala w górę/w dół jest bardzo częsta, na żądanie i używamy wirtualnego hosta do hostowania usług specjalnie w środowisku chmurowym.

Eureka Service Registry Server

wykonaj poniższe kroki, aby utworzyć i uruchomić serwer Eureka.

Utwórz Serwer Eureka

Utwórz projekt Spring boot z portalu Spring Boot initializer z dwiema zależnościami, tj. Eureka server IActuator. Podaj inne współrzędne maven GAV i pobierz projekt.

generowanie projektu Eureka Server Service

Rozpakuj i zaimportuj projekt do Eclipse jako istniejący projekt maven. W tym kroku wszystkie niezbędne zależności zostaną pobrane z repozytorium Mavena.

teraz otwórzSpringEurekaServerApplication klasę, która spring już wygenerowała w pobranym projekcie i dodaj@EnableEurekaServeradnotację na klasie.

package com.example.howtodoinjava.springeurekaserver; import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @EnableEurekaServer@SpringBootApplicationpublic class SpringEurekaServerApplication { public static void main(String args) { SpringApplication.run(SpringEurekaServerApplication.class, args); }}

Zbuduj projekt jeszcze raz. Dzięki tej adnotacji ten artefakt będzie działał jak rejestr mikroserwisów i discovery server.

Konfiguracja serwera

Utwórz jeden plik o nazwieapplication.yml w katalogusrc\main\resources. Dodaj te właściwości-

server: port: ${PORT:8761} # Indicate the default PORT where this service will be startedeureka: client: registerWithEureka: false#telling the server not to register himself in the service registry fetchRegistry: false server: waitTimeInMsWhenSyncEmpty: 0#wait time for subsequent sync

Utwórz inny plik o nazwiebootstrap.yml w katalogusrc\main\resources. Dodaj te właściwości-

spring: application: name: eureka cloud: config: uri: ${CONFIG_SERVER_URL:http://localhost:8888}

Testuj Serwer Eureka

Uruchom aplikację jako spring boot application. Otwórz przeglądarkę i przejdź do , powinieneś zobaczyć stronę główną serwera eureka, która wygląda poniżej.

Eureka Console Without Any Client

należy pamiętać, że w tym momencie nie jest tu rejestrowana żadna usługa, która jest oczekiwana, a gdy uruchomimy usługi klienta, ten serwer zostanie automatycznie zaktualizowany o szczegóły Obsługa klienta.

Eureka Client – Student Service

wykonaj poniższe kroki, aby utworzyć i uruchomić Eureka Client z obsługą studenta.

Utwórz projekt klienta Eureka

Utwórz wiosenny projekt startowy z portalu inicjalizatora z czterema zależnościami, tj. ActuatorWebRest RepositoriesEureka Discovery. Podaj inne współrzędne maven GAV i pobierz projekt.

generowanie projektu klienta –
Mikroserwis Studencki

Rozpakuj i zaimportuj projekt do Eclipse jako istniejący projekt maven.

teraz dodaj@EnableEurekaClient adnotację na Spring Boot application Class obecną w folderzesrc. Dzięki tej adnotacji ten artefakt będzie działał jak klient spring discovery i zarejestruje się na serwerze eureka dołączonym do tej usługi.

package com.example.howtodoinjava.springeurekaclientstudentservice; import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.EnableEurekaClient; @SpringBootApplication@EnableEurekaClientpublic class SpringEurekaClientStudentServiceApplication { public static void main(String args) { SpringApplication.run(SpringEurekaClientStudentServiceApplication.class, args); }}

Konfiguracja klienta

Utwórz jeden plik o nazwieapplication.yml w katalogusrc\main\resources I dodaj poniższe linie.

server: port: 8098#default port where the service will be startedeureka:#tells about the Eureka server details and its refresh time instance: leaseRenewalIntervalInSeconds: 1 leaseExpirationDurationInSeconds: 2 client: serviceUrl: defaultZone: http://127.0.0.1:8761/eureka/ healthcheck: enabled: true lease: duration: 5spring: application: name: student-service #current service name to be used by the eureka server management: security: enabled: false#disable the spring security on the management endpoints like /env, /refresh etc. logging: level: com.example.howtodoinjava: DEBUG

Dodaj API REST

teraz dodaj jedenRestController I wyeksponuj jeden punkt końcowy rest, aby uzyskać wszystkie dane ucznia dla danej szkoły. Tutaj prezentujemy/getStudentDetailsForSchool/{schoolname} punkt końcowy służący celom biznesowym. Dla uproszczenia, ciężko kodujemy szczegóły ucznia.

Student klasa jest prostym POJO.

Testuj klienta Eureka

Uruchom ten projekt jako wiosenną aplikację startową. Teraz sprawdź, czy ta usługa została automatycznie zarejestrowana na serwerze Eureka. Przejdź do konsoli serwisowej Eureka i odśwież stronę. Teraz, jeśli wszystko pójdzie dobrze, zobaczymy jeden wpis dla student-service w konsoli usług eureka. Oznacza to, że zarówno serwer Eureka, jak i klient są sobie świadomi.

konsola Eureka z zarejestrowanym serwisem Studenckim

sprawdzimy teraz ,czy/getStudentDetailsForSchool/{schoolname} punkt końcowy jest włączony i uciekam. Przejdź do przeglądarki i przejdź do , poda dane ucznia dla konkretnej szkoły abcschool.

odpowiedź usługi ucznia

Klient Eureka – serwis szkolny

teraz stworzymy serwis szkolny, który zarejestruje się na serwerze eureka – i odkryje i wywołanie usługi student bez zakodowanej ścieżki URL.

wykonaj dokładne kroki w celu utworzenia usługi dla uczniów, aby utworzyć i uruchomić klienta Eureka prowadzącego również usługę szkolną.

Utwórz projekt klienta Eureka

Utwórz wiosenny projekt startowy z portalu inicjalizatora z czterema zależnościami, tj. ActuatorWebRest RepositoriesEureka Discovery. Podaj inne współrzędne maven GAV i pobierz projekt.

Rozpakuj i zaimportuj projekt do Eclipse jako istniejący projekt maven.

teraz dodaj@EnableEurekaClient adnotację na Spring Boot application Class obecną w folderzesrc. Dzięki tej adnotacji ten artefakt będzie działał jak klient spring discovery i zarejestruje się na serwerze eureka dołączonym do tej usługi.

package com.example.howtodoinjava.springeurekaclientschoolservice;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.EnableEurekaClient;@SpringBootApplication@EnableEurekaClientpublic class SpringEurekaClientSchoolServiceApplication {public static void main(String args) {SpringApplication.run(SpringEurekaClientSchoolServiceApplication.class, args);}}

Konfiguracja klienta

Utwórz jeden plik o nazwieapplication.yml w katalogusrc\main\resources I dodaj poniższe wiersze. Te konfiguracje są bardzo podobne do usług dla studentów, z wyjątkiem numeru portu i nazwy usługi.

Dodaj API REST, które zużywają API REST usługi ucznia

teraz dodaj jedenRestController i wyeksponuj jeden punkt końcowy rest, aby uzyskać szczegóły szkoły. Ten punkt końcowy będzie używał adresu URL w stylu wyszukiwania usługi przy użyciu nazwy aplikacji, zamiast pełnego adresu URL z host: port.

w ten sposób możemy pozbyć się specyficznej konfiguracji usługi i powierzyć usługę look up serwerowi eureka i szablonowi rest podanemu tutaj. Możemy również zastosować równoważenie obciążenia (patrz@LoadBalanced adnotacja) tutaj, jeśli wiele instancji jest uruchomionych dla tej samej usługi.

użyty przez nas URL to. Oczywiście używamy tylko nazwy usługi student-service w miejsce host:port. Będzie to obsługiwane wewnętrznie przez spring framework, serwer eureka i szablon rest razem.

Demo usługi wykrywania i wywoływania

Teraz uruchom również serwis szkolny. Wszystkie trzy nabożeństwa zostały rozpoczęte. Sprawdź konsolę serwera eureka. Uczniowie i służby szkolne muszą być tam zarejestrowani.

konsola Eureka z zarejestrowanymi obydwoma usługami

przejdź do przeglądarki i przejdź dohttp://localhost:9098//getSchoolDetails/abcschool, da szczegóły szkoły dla konkretnej szkoły abcschool szczegóły. Powołaliśmy się wewnętrznie na serwis studencki. Odpowiedź będzie wyglądać tak w przeglądarce:

odpowiedź serwisu szkolnego

rzeczy do sprawdzenia, czy występują jakiekolwiek błędy

  1. Przypisy @EnableEurekaServer I @EnableEurekaClient są sercem ekosystemu aplikacji. Bez tych dwóch rzeczy nie będzie działać w ogóle.
  2. upewnij się, że w momencie uruchomienia usługi klienta konfiguracyjnego usługa serwera eureka jest już uruchomiona, w przeciwnym razie rejestracja może zająć trochę czasu, co może spowodować zamieszanie podczas testowania.

podsumowanie

widzieliśmy, jak łatwo można skutecznie wdrożyć rejestr usług i serwer wykrywania, a także klientów. Spring framework utrzymuje wiele rzeczy wewnętrznie. Tutaj używamy tylko kilku adnotacji i bardzo minimalnej konfiguracji, aby szybko osiągnąć całość.