Spring Cloud Service Discovery with Netflix Eureka
Overview
We will create three microservices for this Netflix Eureka example.
- Eureka Service Registry Server – This microservice will provide the service registry and discovery server.
- Student Microservice – Which will give some functionality based on Student entity. It will be a rest based service and most importantly it will be a eureka client service, which will talk with eureka service to register itself in the service registry.
- School Microservice – Same type as of Student service – only added feature is that it will invoke Student service with service look up mechanism. We will not use absolute URL of student service to interact with that service.
Here is the interaction diagram between above listed three services.
Pre Requisite
- Java 1.8
- Eclipse IDE
- Spring cloud
- Spring boot
- Spring Rest
- Maven
What is Netflix Eureka Server and Clients?
Microservices offer benefits like maintainability, scalability, and high availability over monolithic architectures, but they also pose challenges, particularly in managing individual service addresses. This complexity grows with the number of services and their dynamic nature. To address this, the concept of 'Service registration and discovery' is used, where a dedicated server maintains a registry of all deployed microservices. This server acts as a lookup service, allowing microservices to register and discover each other, providing metadata such as host and port. The server expects regular heartbeat messages from each instance, removing any that fail to send them, thus ensuring a stable ecosystem and eliminating the need for manual address maintenance, especially in dynamic cloud environments.
Eureka Service Registry Server
Follow these steps to create and run Eureka server.
Create Eureka Server
Create a Spring boot project from Spring Boot initializer portal with two dependencies i.e. Eureka server
and Actuator
.
Eureka Server Service Project Generation
Unzip and import the project into Eclipse as existing maven project. In this step, all necessary dependencies will be downloaded from maven repository.
Now open SpringEurekaServerApplication
class that spring already has generated in the downloaded project and add the @EnableEurekaServer
annotation on the class.
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 @SpringBootApplication public class SpringEurekaServerApplication { public static void main(String[] args) { SpringApplication.run(SpringEurekaServerApplication.class, args); } }
Build the project once again. With this annotation, this artifact will act like microservice registry and discovery server.
Server Configuration
Create one file called application.yml
in the src\main\resources
directory. Add these properties –
server: port: ${PORT:8761} # Indicate the default PORT where this service will be started eureka: client: registerWithEureka: false #telling the server not to register himself in the service registry fetchRegistry: false server: waitTimeInMsWhenSyncEmpty: 0 #wait time for subsequent sync
Create another file called bootstrap.yml
in the src\main\resources
directory. Add these properties –
spring: application: name: eureka cloud: config: uri: ${CONFIG_SERVER_URL:http://localhost:8888}
Test Eureka Server
Start the application as spring boot application. Open browser and go to http://localhost:8761/
, you should see the eureka server home page which looks like below.
Eureka Console Without Any Client
Please note that at this point no service is registered here which is expected and once we will spin up the client services, this server will automatically updated with the details of the client services.
Eureka Client – Student Service
Follow these steps to create and run Eureka client running student service.
Create Eureka Client Project
Create a Spring boot project from initializer portal with four dependencies i.e. Actuator
, Web
, Rest Repositories
, Eureka Discovery
. Give other maven GAV coordinates and download the project.
We will now verify that the /getStudentDetailsForSchool/{schoolname}
endpoint is up and running. Go to browser and go to http://localhost:8098/getStudentDetailsForSchool/abcschool
, it will give the Student details for a particular school abcschool
.