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
- Tech Stack i Runtime
- co to jest serwer i klienci Netflix Eureka?
- Eureka Service Registry Server
- Utwórz Serwer Eureka
- Konfiguracja serwera
- Testuj Serwer Eureka
- Eureka Client – Student Service
- Utwórz projekt klienta Eureka
- Konfiguracja klienta
- Dodaj API REST
- Testuj klienta Eureka
- Klient Eureka – serwis szkolny
- Utwórz projekt klienta Eureka
- Konfiguracja klienta
- Dodaj API REST, które zużywają API REST usługi ucznia
- Demo usługi wykrywania i wywoływania
- rzeczy do sprawdzenia, czy występują jakiekolwiek błędy
- podsumowanie
przegląd
stworzymy trzy mikroserwisy dla tego przykładu Netflix Eureka.
- Eureka Service Registry Server – Ta mikrousługa zapewni rejestr usług i serwer wykrywania.
- 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.
- 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.
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.
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@EnableEurekaServer
adnotację 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.
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. Actuator
Web
Rest Repositories
Eureka 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.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.
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
.
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. Actuator
Web
Rest Repositories
Eureka 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.
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:
rzeczy do sprawdzenia, czy występują jakiekolwiek błędy
- Przypisy
@EnableEurekaServer
I@EnableEurekaClient
są sercem ekosystemu aplikacji. Bez tych dwóch rzeczy nie będzie działać w ogóle. - 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ść.