Skip to main content

Microservices - Service Registration/ discovery using Spring boot and Eureka

In this tutorial we will learn how to create registry/ discovery server using Eureka and Spring boot. We will register our Rest microservice with this registry server which can be discovered by client by connecting to registry server.

What is registry/ discovery server

We can assume registry or discovery server as a central place where we can find all our microservices using their registered IDs with discovery server. Microservices register themselves in registry server and client applications access them using a single registry or discovery server. It is similar to a phone directory but provides many other useful features.
If we don't user registry server then we need host name and endpoint details to access a service. In today's era most of the services are deployed in cloud and using cloud features like auto-scaling where network addresses are updated dynamically and we can't use a simple network address for that. Now when we use registry server, then such microservice are registering themselves with registry server. And since clients are access these services using registry server they don't need to bother of network address. They just need to connect to registry server and invoke the desired operations using registered service ID.

Creating registry/ discovery server

In below steps we will see the implementation to create our registry server.
  • Maven dependencies
  •         <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            </dependency>
    
  • Enable Eureka server on main class
  • @EnableEurekaServer
    @SpringBootApplication
    public class DiscoveryServerApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(DiscoveryServerApplication.class, args);
        }
    
    }
    
  • Required configuration 
  • spring.application.name: discovery-server
    server.port: 8089
    eureka:
      instance:
        hostname: localhost
      client:
        registerWithEureka: false
        fetchRegistry: false
    

Service registration

Here I am using spring boot microservice to register with our discovery server. Below are the steps to register a service.
  • Maven dependencies
  •         <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            </dependency>
    
  • Enable discovery client
  • @EnableDiscoveryClient
    @SpringBootApplication
    public class UserMgmtServiceApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(UserMgmtServiceApplication.class, args);
        }
    }
    
  • Required configuration
  • eureka:
      client:
        serviceUrl:
          defaultZone: http://localhost:8089/eureka
    

Microservice (User management)

This microservice is created for demonstration purpose. This service uses spring cloud config and mongo DB which will be required to run this microservice but you can create your own code without these dependencies. Below is the POST link for complete tutorial and source code.

Accessing Eureka server dashboard

Now start registry server by executing below command.
mvn spring-boot:run
Access below URL in browser and you will see the similar screen as given below. Currently there no services registered.
URL: http://localhost:8089/
Eureka server

Now start the microservice and refresh the discovery service URL. In below screen you can see now it is showing the service instance as registered applications.
eureka server

Source code

Source code is available at below Git location.
https://github.com/thetechnojournals/microservices/tree/master/discovery-server

Comments

Popular Posts

Setting up kerberos in Mac OS X

Kerberos in MAC OS X Kerberos authentication allows the computers in same domain network to authenticate certain services with prompting the user for credentials. MAC OS X comes with Heimdal Kerberos which is an alternate implementation of the kerberos and uses LDAP as identity management database. Here we are going to learn how to setup a kerberos on MAC OS X which we will configure latter in our application. Installing Kerberos In MAC we can use Homebrew for installing any software package. Homebrew makes it very easy to install the kerberos by just executing a simple command as given below. brew install krb5 Once installation is complete, we need to set the below export commands in user's profile which will make the kerberos utility commands and compiler available to execute from anywhere. Open user's bash profile: vi ~/.bash_profile Add below lines: export PATH=/usr/local/opt/krb5/bin:$PATH export PATH=/usr/local/opt/krb5/sbin:$PATH export LDFLAGS=...

Singleton class in java

What is Singleton class Singleton is a design technique which gaurantees that there will be only instance of a class globally. Such classes are required when we need to create some objects which are memory/ resource extensive and we can't afford many such objects. Using singleton We can maintain single object per JVM per classloader. Classloader could be different in different hierarchy and in such case we may have more than one instances of singleton but we can avoid it by loading it at appropriate classloader. For example in an ear application there could be multiple web modules and each one of them will have their own singleton instance. Sometimes it may be a need but sometimes it could be a flaw which can be resolved by loading it either at ear level or web module level as per requirement. Implementing singleton class There are two different ways to implement singleton in java. Using singleton design pattern In this pattern we can create singleton either using lazy...

jaxb2-maven-plugin to generate java code from XSD schema

In this tutorial I will show how to generate the Java source code from XSD schema. I will use jaxb2-maven-plugin to generate the code using XSD file which will be declared in pom.xml to make it part of build, so when maven build is executed it will generate the java code using XSD. Class generation can be controlled in plugin configuration. Maven changes (pom.xml) Include below plugin in your pom.xml. Here we have done some configuration under configuration section as given below. schemaDirectory : This is the directory where I keep my schema (XSD file). outputDirectory : This is the java source location where I want to generate the Java files. If it is not given then by default it will be generate inside target folder. clearOutputDir : If this property is true then it will generate the classes on each build otherwise it will generate only if output directory is empty. <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>jaxb2-maven-plugin</art...

Print English alphabets using for loop in Java

 In this post we will see how we can print the english alphabets [a-z] using for loop. One way is to have a character array of a-z and print it using loop. But there is another way to just print them using ascii code. What is ascii code There are total 256 numbers in ascii and each of which represents a specific character including alphabets. Numbers from 65-90 represents the alphabets in capital case [A-Z] and numbers from 97-122 represents alphabets in small case [a-z]. Printing alphabets using for loop with ascii numbers Below code prints alphabets in both capital and small cases using for loop. Here you can see we are using ascii numbers in for loop which are printed after type casted to character type where it automatically translate the number to equivalent character. public class PrintAlphabetsUsingLoop { public static void main(String[] args) { int alphabetsCount = 26; int capitalLetterStart = 65; int smallLetterStart = 97; System.out.println("Printing lette...