Eureka Discovery Server Tutorial

In this tutorial, you will learn how to startup your own Eureka Discovery Server, so that the Microservices you build can register with this server and be discoverable by other Microservices.

Create a New Spring Boot App

Eureka Discovery Server is a Spring Boot app. So to create a new Eureka Discovery server for our project we first need to create a new Spring Boot app. Please follow this tutorial on how to create a very simple Spring Boot application which supports development of RESTful Web Services.

Configure Eureka Discovery Server POM.XML File

Now when you have your Spring Boot Application created. Open its POM.xml file and add the following dependencies.

       <dependency>
           <groupId>org.springframework.cloud</groupId>
           <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
       </dependency>
       <dependency>
           <groupId>org.springframework.cloud</groupId>
           <artifactId>spring-cloud-netflix-eureka-server</artifactId>
           <type>jar</type>
       </dependency>

The above two dependencies go into the <dependencies> section.

Then add the following section to your POM.xml file as well.

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
</dependencyManagement>

and add the <properties> 

<properties>
    <java.version>1.8</java.version>
    <spring-cloud.version>Greenwich.RC2</spring-cloud.version>
</properties>

below is a complete POM.xml file from my working project.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.appsdeveloperblog.photoapp.discovery</groupId>
    <artifactId>PhotoAppDiscoveryService</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>PhotoAppDiscoveryService</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.RC2</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-netflix-eureka-server</artifactId>
            <type>jar</type>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
        </repository>
    </repositories>

</project>

Add Eureka Server Annotation

Now when we have the needed dependencies added to the POM.xml file of our project we can start using Eureka Server annotations. To enable our application to work as Eureka Server we will need to add the @EnableEurekaServer annotation to Application class that contains public static void main(String[] args) function. Below is an example of my Java class with @EnableEurekaServer annotation added above the class name.

package com.appsdeveloperblog.photoapp.discovery.PhotoAppDiscoveryService;

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

@SpringBootApplication
@EnableEurekaServer
public class PhotoAppDiscoveryServiceApplication {

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

}

Configure Application.properties File

Before we can run our Eureka Server application we need to add a few basic configuration details to our application.properties file.

server.port=8010
spring.application.name=PhotoAppApi-eureka-server
eureka.client.registerWithEureka=false
eureka.client.fetchRegistry=false

server.port – is a port number of which you need your discovery server to run. The port number must be unique and available.
spring.application.name – is a name of your discovery server.
eureka.client.registerWithEureka and eureka.client.fetchRegistry are set to false because we want to prevent this Spring Boot application to register itself with discovery service since this application is itself a discovery service.

Starting Eureka Discovery Server

We are now ready to start up our new Eureka Discovery Server and since it is a Spring Boot application we can start it up with maven command like in the example below:

mvn spring-boot:run

Once your application starts up, open the browser window and navigate to:

http://localhost:8010

I used 8010 for the port number because this is what we have specified as a server port number in our application.properties file above. Once you open http://localhost:8010 url in the browser window, you should see the Eureka Discovery Server page.

At this moment our Eureka Discovery Server does not have any Microservices registered with it but we will do so in the following tutorials. The goal of this tutorial was to learn how to start up your own Discovery Service. To learn how to register existing Microservices with Eureka, have a look at this tutorial: Register Web Service with Eureka.

I hope this tutorial was of good value to you. To learn more about building RESTful Web Services with Spring Boot check my RESTful Web Services with Spring MVC page. If you are interested to learn more about Spring Cloud, have a look at the below video courses.