In de kop zagen we drie buzzwords:
- Microservices
- Netflix Eureka
- Discovery (Registry)
What Is a Microservice?
In eenvoudige bewoordingen zijn microservice(s) clusters van kleine applicaties die gecoördineerd samenwerken om een complete oplossing te bieden.
Wanneer we het hebben over een heleboel kleine applicaties die onafhankelijk van elkaar samenwerken, dan zullen ze allemaal hun eigen URL’s en poorten hebben. In dat scenario zou het erg omslachtig zijn om al deze microservices synchroon te laten lopen, en nog belangrijker, met monitoring. Dit probleem zal nog veel groter worden wanneer we load balancers gaan implementeren.
Om dit probleem op te lossen, hebben we een tool nodig die het register van alle microservices in het ecosysteem bewaakt en onderhoudt.
Wat is Netflix Eureka?
Dit is een tool die door Netflix wordt geleverd om een oplossing te bieden voor het bovenstaande probleem. Het bestaat uit de Eureka Server en Eureka clients. Eureka Server is op zichzelf een microservice waar alle andere microservices zich bij aanmelden. Eureka Clients zijn de onafhankelijke microservices. We zullen zien hoe we dit kunnen configureren in een microservice-ecosysteem.
Ik zal Spring Boot gebruiken om een paar microservices te maken die zullen fungeren als Eureka Clients en een Discovery Server die een Eureka Server zal zijn. Hier is de volledige projectstructuur:
Let’s Discuss the Eureka Discovery Server
Dit is de Eureka Server, en daarvoor moeten we een Eureka-dependency in het project opnemen. Hieronder staat de pom.xml voor Eureka Discovery Server.
Ook moeten we het eigenschappenbestand voor dit project bijwerken om aan te geven dat het om een discovery server gaat en niet om een client.
eureka.instance.hostname=localhosteureka.client.register-with-eureka=falseeureka.client.fetch-registry=false
Om de discovery-toepassing aan een specifieke poort te binden en de toepassing een naam te geven, moeten we ook het volgende toevoegen:
server.port=8000spring.application.name=DiscoveryServer
Eén laatste ding dat we moeten doen, is de Spring Boot-toepassing annoteren om deze als een Eureka-server in te schakelen. Hiervoor moeten we @EnableEurekaServer
.
Als we de applicatie opstarten, zullen we een UI zien die door Eureka wordt geleverd om een lijst weer te geven van alle servers die zijn geregistreerd. Maar op dit moment hebben we er nog geen!
Nu moeten we een paar microservices toevoegen aan het ecosysteem en deze registreren bij de zoekserver. Hiervoor moeten we ook de afhankelijkheden toevoegen die nodig zijn in elke service en ze registreren bij de server. We zullen zien hoe in de details hieronder.
Ik heb drie eenvoudige microservices (microservice1, microservice2, microservice3) gemaakt met Spring Boot en elk draait op zijn eigen poort (8002, 8003 en 8004).
Als client moet het zichzelf registreren bij de server, en dat gebeurt in het property-bestand, zoals hieronder.
De hoofdapplicatie wordt in elke microservice geannoteerd met @EnableEurekaClient
.
Boot deze applicatie om te draaien op poort 8004 en deze zal zichzelf automatisch registreren bij de discovery server. Op vergelijkbare wijze heb ik nog twee microservices gemaakt en deze geregistreerd bij de discovery server.
We kunnen zien dat er drie servers in het ecosysteem draaien en we kunnen de status van deze servers ook monitoren.
Dit vergemakkelijkt het monitoren van alle servers en hun replica’s in het geval we een load balancer gebruiken.
Ik hoop dat dit u op weg helpt met het gebruik van Discovery Server en Clients met Eureka.