Skip to content
geeksforgeeks
  • Courses
    • DSA to Development
    • Get IBM Certification
    • Newly Launched!
      • Master Django Framework
      • Become AWS Certified
    • For Working Professionals
      • Interview 101: DSA & System Design
      • Data Science Training Program
      • JAVA Backend Development (Live)
      • DevOps Engineering (LIVE)
      • Data Structures & Algorithms in Python
    • For Students
      • Placement Preparation Course
      • Data Science (Live)
      • Data Structure & Algorithm-Self Paced (C++/JAVA)
      • Master Competitive Programming (Live)
      • Full Stack Development with React & Node JS (Live)
    • Full Stack Development
    • Data Science Program
    • All Courses
  • Tutorials
    • Data Structures & Algorithms
    • ML & Data Science
    • Interview Corner
    • Programming Languages
    • Web Development
    • CS Subjects
    • DevOps And Linux
    • School Learning
  • Practice
    • Build your AI Agent
    • GfG 160
    • Problem of the Day
    • Practice Coding Problems
    • GfG SDE Sheet
  • Contests
    • Accenture Hackathon (Ending Soon!)
    • GfG Weekly [Rated Contest]
    • Job-A-Thon Hiring Challenge
    • All Contests and Events
  • System Design Tutorial
  • What is System Design
  • System Design Life Cycle
  • High Level Design HLD
  • Low Level Design LLD
  • Design Patterns
  • UML Diagrams
  • System Design Interview Guide
  • Scalability
  • Databases
Open In App
Next Article:
Java Spring Boot Microservices Example - Step by Step Guide
Next article icon

Spring Boot Microservices Communication using FeignClient with Example

Last Updated : 04 Jan, 2025
Comments
Improve
Suggest changes
Like Article
Like
Report

FeignClient also known as Spring Cloud OpenFeign is a Declarative REST Client in Spring Boot Web Application. But what do you mean by Declarative REST Client? It means we need to specify the client specification as an Interface and Spring Boot will take care of the implementation for us. Writing web services with the help of FeignClient is very easier. FeignClient is mostly used to consume REST API endpoints which are exposed by third-party or microservice.

How to Use FeignClient in Spring Boot Application?

For Maven:

Add this dependency to the pom.xml file.

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

For Gradle:

Add the following entries to the build.gradle file.

dependencies {
implementation 'org.springframework.cloud:spring-cloud-starter-openfeign'
}

After adding the library annotate the main Application file with this @EnableFeignClients annotation like below

@SpringBootApplication
@EnableFeignClients
public class Application {

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

}

Create an Interface and annotate it with @FeignClient and declare your calling methods like below

@FeignClient(name = "giveYourServiceName", url = "provideYourUrlHere", path = "provideYourContextPathHere")
public interface AddressClient {

@GetMapping("/address/{id}")
public ResponseEntity<AddressResponse> getAddressByEmployeeId(@PathVariable("id") int id);

}

Now it's ready for use in the service class file. You can refer to the below code

@Service
public class EmployeeService {


// More Code Here


// -------------

// Spring will create the implementation
// for this class
// and will inject the bean here (proxy)
@Autowired
private AddressClient addressClient;

public EmployeeResponse getEmployeeById(int id) {

// More Code Here

// Using FeignClient
ResponseEntity<AddressResponse> addressResponse = addressClient.getAddressByEmployeeId(id);
employeeResponse.setAddressResponse(addressResponse.getBody());

return employeeResponse;
}

}

Let's understand the whole thing by developing two microservices and let's communicate with each other using FeignClient.

Example Project

In this project, we are going to develop two Microservices

  1. employee-service
  2. address-service

Developing employee-service Step by Step

Step 1: Create a New Spring Boot Project in Spring Initializr

To create a new Spring Boot project, please refer to How to Create a Spring Boot Project in Spring Initializr and Run it in IntelliJ IDEA. For this project choose the following things

  • Project: Maven
  • Language: Java
  • Packaging: Jar
  • Java: 17

 Please choose the following dependencies while creating the project.

  • Spring Boot DevTools
  • Spring Data JPA
  • MySQL Driver
  • Spring Web
  • OpenFeign

Generate the project and run it in IntelliJ IDEA by referring to the above article.

Note: We have used the MySQL database in this project.

Step 2: Create Schema in MySQL Workbench and Put Some Sample Data

Go to your MySQL Workbench and create a schema named gfgmicroservicesdemo and inside that create a table called employee and put some sample data as shown in the below image. Here we have created 4 columns and put some sample data.

  1. id
  2. name
  3. email
  4. age

Spring-Boot-Microservices-1-(2)

Now we are going to fetch Employee Data from Employee Table in our Spring Boot project. To do it refer to the following steps. Before moving to IntelliJ IDEA let's look at the complete project structure for our Microservices.

Feignclient-1

Step 3: Make Changes in Your application.properties File

Now make the following changes in your application.properties file.

spring.datasource.url=jdbc:mysql://localhost:3306/gfgmicroservicesdemo
spring.datasource.username=put your username here
spring.datasource.password=put your password here

spring.application.name=employee-service
server.port=8080

# Set Your Context Path Here
server.servlet.context-path=/employee-service

Step 4: Create Your Entity/Model Class

Go to the src > main > java > entity and create a class Employee and put the below code. This is our model class.

Java
package com.gfg.employeaap.entity;  import jakarta.persistence.*;  @Entity @Table(name = "employee") public class Employee {      @Id     @GeneratedValue(strategy = GenerationType.IDENTITY)     @Column(name = "id")     private int id;      @Column(name = "name")     private String name;      @Column(name = "email")     private String email;      @Column(name = "age")     private String age;      public int getId() {         return id;     }      public void setId(int id) {         this.id = id;     }      public String getName() {         return name;     }      public void setName(String name) {         this.name = name;     }      public String getEmail() {         return email;     }      public void setEmail(String email) {         this.email = email;     }      public String getAge() {         return age;     }      public void setAge(String age) {         this.age = age;     } } 

Step 5: Create Your Repository Interface

Go to the src > main > java > repository and create an interface EmployeeRepo and put the below code. This is our repository where we write code for all the database-related stuff.

Java
package com.gfg.employeaap.repository;  import com.gfg.employeaap.entity.Employee; import org.springframework.data.jpa.repository.JpaRepository;  @Repository public interface EmployeeRepo extends JpaRepository<Employee, Integer> {  } 

Note: Please refer to this article to know more about JpaRepository.

Step 6: Create an EmployeeResponse Class

Go to the src > main > java > response and create a class EmployeeResponse and put the below code.

Java
package com.gfg.employeaap.response;  public class EmployeeResponse {      private int id;     private String name;     private String email;     private String age;      public int getId() {         return id;     }      public void setId(int id) {         this.id = id;     }      public String getName() {         return name;     }      public void setName(String name) {         this.name = name;     }      public String getEmail() {         return email;     }      public void setEmail(String email) {         this.email = email;     }      public String getAge() {         return age;     }      public void setAge(String age) {         this.age = age;     } } 

Step 7: Create Your Service Class

Go to the src > main > java > service and create a class EmployeeService and put the below code. This is our service class where we write our business logic.

Java
package com.gfg.employeaap.service;  import com.gfg.employeaap.entity.Employee; import com.gfg.employeaap.repository.EmployeeRepo; import com.gfg.employeaap.response.EmployeeResponse; import org.modelmapper.ModelMapper; import org.springframework.beans.factory.annotation.Autowired;  import java.util.Optional;  @Service public class EmployeeService {      @Autowired     private EmployeeRepo employeeRepo;      @Autowired     private ModelMapper mapper;      public EmployeeResponse getEmployeeById(int id) {         Optional<Employee> employee = employeeRepo.findById(id);         EmployeeResponse employeeResponse = mapper.map(employee, EmployeeResponse.class);         return employeeResponse;     }  } 

Step 8: Create an Employee Controller

Go to the src > main > java > controller and create a class EmployeeController and put the below code. Here we are going to create an endpoint "/employees/{id}" to find an employee using id.

Java
package com.gfg.employeaap.controller;  import com.gfg.employeaap.response.EmployeeResponse; import com.gfg.employeaap.service.EmployeeService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController;  @RestController public class EmployeeController {      @Autowired     private EmployeeService employeeService;      @GetMapping("/employees/{id}")     private ResponseEntity<EmployeeResponse> getEmployeeDetails(@PathVariable("id") int id) {         EmployeeResponse employee = employeeService.getEmployeeById(id);         return ResponseEntity.status(HttpStatus.OK).body(employee);     }  } 

Step 9: Create a Configuration Class

Go to the src > main > java > configuration and create a class EmployeeConfig and put the below code.

Java
package com.gfg.employeaap.configuration;  import com.gfg.employeaap.service.EmployeeService; import org.modelmapper.ModelMapper; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;  @Configuration public class EmployeeConfig {      @Bean     public ModelMapper modelMapperBean() {         return new ModelMapper();     }  } 

Note: You may refer to these two articles

  • Spring @Configuration Annotation with Example
  • Spring @Bean Annotation with Example

Before running the Microservice below is the complete pom.xml file. Please cross-verify if you have missed some dependencies

XML
<?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 https://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>3.0.2</version>         <relativePath/> <!-- lookup parent from repository -->     </parent>     <groupId>com.gfg.employeaap</groupId>     <artifactId>employee-service</artifactId>     <version>0.0.1-SNAPSHOT</version>     <name>employee-service</name>     <description>Employee Service</description>     <properties>         <java.version>17</java.version>         <spring-cloud.version>2022.0.2</spring-cloud.version>     </properties>     <dependencies>         <dependency>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-starter-data-jpa</artifactId>         </dependency>         <dependency>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-starter-web</artifactId>         </dependency>          <dependency>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-devtools</artifactId>             <scope>runtime</scope>             <optional>true</optional>         </dependency>         <dependency>             <groupId>com.mysql</groupId>             <artifactId>mysql-connector-j</artifactId>             <scope>runtime</scope>         </dependency>         <dependency>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-starter-test</artifactId>             <scope>test</scope>         </dependency>         <dependency>             <groupId>org.modelmapper</groupId>             <artifactId>modelmapper</artifactId>             <version>3.1.1</version>         </dependency>         <dependency>             <groupId>org.springframework.cloud</groupId>             <artifactId>spring-cloud-starter-openfeign</artifactId>         </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>  </project> 

Step 10: Run Your Employee Microservice

To run your Employee Microservice src > main > java > EmployeeServiceApplication and click on the Run button. If everything goes well then you may see the following screen in your console. Please refer to the below image.

context-path-2

Step 11: Test Your Endpoint in Postman

Now open Postman and hit the following URL

GET: http://localhost:8080/employee-service/employees/1

And you can see the following response

{
"id": 1,
"name": "Amiya",
"email": "ar@gmail",
"age": "25"
}

Developing address-service Step by Step

Step 1: Create a New Spring Boot Project in Spring Initializr

To create a new Spring Boot project, please refer to How to Create a Spring Boot Project in Spring Initializr and Run it in IntelliJ IDEA. For this project choose the following things

  • Project: Maven
  • Language: Java
  • Packaging: Jar
  • Java: 17

 Please choose the following dependencies while creating the project.

  • Spring Boot DevTools
  • Spring Data JPA
  • MySQL Driver
  • Spring Web

Generate the project and run it in IntelliJ IDEA by referring to the above article.

Note: We have used the MySQL database in this project.

Step 2: Create Schema in MySQL Workbench and Put Some Sample Data

Go to your MySQL Workbench and create a schema named gfgmicroservicesdemo and inside that create a table called address and put some sample data as shown in the below image. 

Address Table:

Here we have created 4 columns and put some sample data.

  1. id
  2. city
  3. state
  4. employee_id

Note: In the Address table, employee_id is a foreign key so create it accordingly. We are going to perform a SQL join operation in our native SQL query. So create tables carefully.

Spring-Boot-Native-Query-1

Before moving to IntelliJ IDEA let's have a look at the complete project structure for our Microservices.

Spring-Boot-Native-Query-2

Step 3: Make Changes in Your application.properties File

Now make the following changes in your application.properties file.

spring.datasource.url=jdbc:mysql://localhost:3306/gfgmicroservicesdemo
spring.datasource.username=put your username here
spring.datasource.password=put your password here

spring.application.name=address-service
server.port=8081
server.servlet.context-path=/address-service

Step 4: Create Your Entity/Model Class

Go to the src > main > java > entity and create a class Address and put the below code. This is our model class.

Java
package com.gfg.addressapp.entity;  import jakarta.persistence.*;  @Entity @Table(name = "address") public class Address {      @Id     @GeneratedValue(strategy = GenerationType.IDENTITY)     @Column(name = "id")     private int id;      @Column(name = "city")     private String city;      @Column(name = "state")     private String state;      public int getId() {         return id;     }      public void setId(int id) {         this.id = id;     }      public String getCity() {         return city;     }      public void setCity(String city) {         this.city = city;     }      public String getState() {         return state;     }      public void setState(String state) {         this.state = state;     } } 

Step 5: Create Your Repository Interface

Go to the src > main > java > repository and create an interface AddressRepo and put the below code. This is our repository where we write code for all the database-related stuff.

Java
package com.gfg.addressapp.repository;  import com.gfg.addressapp.entity.Address; import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param;  @Repository public interface AddressRepo extends JpaRepository<Address, Integer> {      @Query(         nativeQuery = true,         value         = "SELECT ea.id, ea.city, ea.state FROM gfgmicroservicesdemo.address ea join gfgmicroservicesdemo.employee e on e.id = ea.employee_id where ea.employee_id=:employeeId")        Optional<Address> findAddressByEmployeeId(@Param("employeeId") int employeeId); } 

Note: Please refer to this article to know more about JpaRepository.

Step 6: Create an AddressResponse Class

Go to the src > main > java > response and create a class AddressResponse and put the below code.

Java
package com.gfg.addressapp.response;  public class AddressResponse {      private int id;     private String city;     private String state;      public int getId() {         return id;     }      public void setId(int id) {         this.id = id;     }      public String getCity() {         return city;     }      public void setCity(String city) {         this.city = city;     }      public String getState() {         return state;     }      public void setState(String state) {         this.state = state;     } } 

Step 7: Create Your Service Class

Go to the src > main > java > service and create a class AddressService and put the below code. This is our service class where we write our business logic.

Java
package com.gfg.addressapp.service;  import com.gfg.addressapp.entity.Address; import com.gfg.addressapp.repository.AddressRepo; import com.gfg.addressapp.response.AddressResponse; import org.modelmapper.ModelMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;  import java.util.Optional;  @Service public class AddressService {      @Autowired     private AddressRepo addressRepo;      @Autowired     private ModelMapper mapper;      public AddressResponse findAddressByEmployeeId(int employeeId) {         Optional<Address> addressByEmployeeId = addressRepo.findAddressByEmployeeId(employeeId);         AddressResponse addressResponse = mapper.map(addressByEmployeeId, AddressResponse.class);         return addressResponse;     }  } 

Step 8: Create an Address Controller

Go to the src > main > java > controller and create a class AddressController and put the below code. Here we are going to create an endpoint "/address/{employeeId}" to find the address using employee_id. Thats why we have created a foreign key in the Address table and we have performed the SQL join operation in the native query to get our desired result.

Java
package com.gfg.addressapp.controller;  import com.gfg.addressapp.response.AddressResponse; import com.gfg.addressapp.service.AddressService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController;  @RestController public class AddressController {      @Autowired     private AddressService addressService;      @GetMapping("/address/{employeeId}")     public ResponseEntity<AddressResponse> getAddressByEmployeeId(@PathVariable("employeeId") int employeeId) {         AddressResponse addressResponse = addressService.findAddressByEmployeeId(employeeId);         return ResponseEntity.status(HttpStatus.OK).body(addressResponse);     }  } 

Step 9: Create a Configuration Class

Go to the src > main > java > configuration and create a class AddressConfig and put the below code.

Java
package com.gfg.addressapp.configuration;  import com.gfg.addressapp.service.AddressService; import org.modelmapper.ModelMapper; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;  @Configuration public class AddressConfig {      @Bean     public ModelMapper modelMapperBean() {         return new ModelMapper();     }  } 

Note: You may refer to these two articles

  • Spring @Configuration Annotation with Example
  • Spring @Bean Annotation with Example

Before running the Microservice below is the complete pom.xml file. Please cross-verify if you have missed some dependencies

XML
<?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 https://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>3.0.2</version>         <relativePath/> <!-- lookup parent from repository -->     </parent>     <groupId>com.gfg.addressapp</groupId>     <artifactId>address-service</artifactId>     <version>0.0.1-SNAPSHOT</version>     <name>address-service</name>     <description>Address Service</description>     <properties>         <java.version>17</java.version>     </properties>     <dependencies>         <dependency>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-starter-data-jpa</artifactId>         </dependency>         <dependency>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-starter-web</artifactId>         </dependency>          <dependency>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-devtools</artifactId>             <scope>runtime</scope>             <optional>true</optional>         </dependency>         <dependency>             <groupId>com.mysql</groupId>             <artifactId>mysql-connector-j</artifactId>             <scope>runtime</scope>         </dependency>         <dependency>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-starter-test</artifactId>             <scope>test</scope>         </dependency>         <dependency>             <groupId>org.modelmapper</groupId>             <artifactId>modelmapper</artifactId>             <version>3.1.1</version>         </dependency>     </dependencies>      <build>         <plugins>             <plugin>                 <groupId>org.springframework.boot</groupId>                 <artifactId>spring-boot-maven-plugin</artifactId>             </plugin>         </plugins>     </build>  </project> 

Step 10: Run Your Address Microservice

To run your Address Microservice src > main > java > AddressServiceApplication and click on the Run button. If everything goes well then you may see the following screen in your console. Please refer to the below image.

Spring-Boot-Native-Query-4

Step 11: Test Your Endpoint in Postman

Now open Postman and hit the following URL

GET: http://localhost:8081/address-service/address/2

And you can see the following response

{
"id": 1,
"city": "BLS",
"state": "Odisha"
}

Microservices Communication using FeignClient

Now let's communicate between two microservices using FeignClient. So we are going to get the address data by the employeeId of an employee and when we communicate we are going to get a response like the below. So let's implement it.

{
"id": 2,
"name": "Asish",
"email": "asis@gmail",
"age": "30",
"addressResponse": {
"id": 1,
"city": "BLS",
"state": "Odisha"
}
}

Here employee-service is going to consume data from the address-service. So let's write the logic in the employee-service.

Step 1: Create an AddressResponse Class

Go to the employee-service > src > main > java > response and create a class AddressResponse and put the below code.

Java
package com.gfg.employeaap.response;  public class AddressResponse {      private int id;     private String city;     private String state;      public int getId() {         return id;     }      public void setId(int id) {         this.id = id;     }      public String getCity() {         return city;     }      public void setCity(String city) {         this.city = city;     }      public String getState() {         return state;     }      public void setState(String state) {         this.state = state;     } } 

Step 2: Modify EmployeeResponse Class

Also, go to the employee-service > src > main > java > response > EmployeeResponse and modify the EmployeeResponse class as below.

Java
package com.gfg.employeaap.response;  public class EmployeeResponse {      private int id;     private String name;     private String email;     private String age;        // Add AddressResponse Here     private AddressResponse addressResponse;      public int getId() {         return id;     }      public void setId(int id) {         this.id = id;     }      public String getName() {         return name;     }      public void setName(String name) {         this.name = name;     }      public String getEmail() {         return email;     }      public void setEmail(String email) {         this.email = email;     }      public String getAge() {         return age;     }      public void setAge(String age) {         this.age = age;     }      public AddressResponse getAddressResponse() {         return addressResponse;     }      public void setAddressResponse(AddressResponse addressResponse) {         this.addressResponse = addressResponse;     } } 

Please refer to the below image.

microservice-communication-1

Step 3: Create an AddressClient Interface

Go to the employee-service > src > main > java > feignclient and create an interface AddressClient and put the below code.

Java
package com.gfg.employeaap.feignclient;  import com.gfg.employeaap.response.AddressResponse; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable;  @FeignClient(name = "address-service", url = "http://localhost:8081", path = "/address-service") public interface AddressClient {      @GetMapping("/address/{id}")     public ResponseEntity<AddressResponse> getAddressByEmployeeId(@PathVariable("id") int id);  } 

Step 4: Modify EmployeeServiceApplication Class

Go to the employee-service > src > main > java > EmployeeServiceApplication and annotate it with @EnableFeignClients annotation. Below is the complete code for EmployeeServiceApplication Class.

Java
package com.gfg.employeaap;  import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.openfeign.EnableFeignClients;  @SpringBootApplication @EnableFeignClients public class EmployeeServiceApplication {      public static void main(String[] args) {         SpringApplication.run(EmployeeServiceApplication.class, args);     }  } 

Step 5: Modify EmployeeService Class

Now go to the employee-service > src > main > java > service > EmployeeService and modify the EmployeeService class as below. Add the below code inside this class.

@Autowired
private AddressClient addressClient;

// Using FeignClient
ResponseEntity<AddressResponse> addressResponse = addressClient.getAddressByEmployeeId(id);
employeeResponse.setAddressResponse(addressResponse.getBody());

Below is the complete code for EmployeeService Class.

Java
package com.gfg.employeaap.service;  import com.gfg.employeaap.entity.Employee; import com.gfg.employeaap.feignclient.AddressClient; import com.gfg.employeaap.repository.EmployeeRepo; import com.gfg.employeaap.response.AddressResponse; import com.gfg.employeaap.response.EmployeeResponse; import org.modelmapper.ModelMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service;  import java.util.Optional;  @Service public class EmployeeService {      @Autowired     private EmployeeRepo employeeRepo;      @Autowired     private ModelMapper mapper;      // Spring will create the implementation     // for this class     // and will inject the bean here (proxy)     @Autowired     private AddressClient addressClient;      public EmployeeResponse getEmployeeById(int id) {          Optional<Employee> employee = employeeRepo.findById(id);         EmployeeResponse employeeResponse = mapper.map(employee, EmployeeResponse.class);          // Using FeignClient         ResponseEntity<AddressResponse> addressResponse = addressClient.getAddressByEmployeeId(id);         employeeResponse.setAddressResponse(addressResponse.getBody());          return employeeResponse;     }  } 

Step 6: Run Both Your Address and Employee Microservices

Now run your both Address and Employee Microservices. If everything goes well then you may see the following screen in your console. Please refer to the below image.

microservice-communication-2

Step 7: Test Your Endpoint in Postman

Now open Postman and hit the following URL

GET: http://localhost:8080/employee-service/employees/2

And you can see the following response

{
"id": 2,
"name": "Asish",
"email": "asis@gmail",
"age": "30",
"addressResponse": {
"id": 1,
"city": "BLS",
"state": "Odisha"
}
}

Please refer to the below image.

microservice-communication-3


Next Article
Java Spring Boot Microservices Example - Step by Step Guide

A

AmiyaRanjanRout
Improve
Article Tags :
  • Java
  • Advance Java
  • Java-Spring-Boot
  • Java Microservices
Practice Tags :
  • Java

Similar Reads

  • Spring Boot Microservices Communication using WebClient with Example
    WebClient is an interface illustrating the main entry point for performing web requests. It is also known as the reactive web client which is introduced in Spring 5. This new client is a reactive, non-blocking solution that works over the HTTP/1.1 protocol. We can also say that it is a replacement f
    15 min read
  • Spring Boot Microservices Communication using RestTemplate with Example
    RestTemplate is a synchronous REST client which performs HTTP requests using a simple template-style API. We can also state that RestTemplate class is a synchronous client and is designed to call REST services. Apart from that, RestTemplate class plays a major role whenever we talk about Spring Boot
    14 min read
  • Microservices Communication with Apache Kafka in Spring Boot
    Apache Kafka is a distributed streaming platform and can be widely used to create real-time data pipelines and streaming applications. It can publish and subscribe to records in progress, save these records in an error-free manner, and handle floating records as they arrive. Combined with Spring Boo
    6 min read
  • Different Ways to Establish Communication Between Spring Microservices
    If you are working with a Spring Boot project which involves multiple microservices, You might have felt the need to communicate from microservice m1 to microservice m2. Depending upon business use-cases, this communication can be of synchronous or asynchronous type. Before digging dip further. Let'
    3 min read
  • Java Spring Boot Microservices Example - Step by Step Guide
    Microservices is an architectural approach to build a collection of logic, data layers, and loosely coupled applications. Every microservices deals with one business function end-to-end independently from other microservices. Microservices present simple and understandable APIs to communicate with e
    6 min read
  • Implementing Secure API Communication in Spring Boot
    In modern web applications, securing API communication is important to protect sensitive data and ensuring the integrity of interactions between clients and servers. In this article, we will learn how to implement secure API communication in a Spring Boot application. Securing API communication is c
    5 min read
  • Microservices Communication with NATS
    Microservices architectures enable the development of scalable and independent services within the system, promoting agility and robustness. Communication between these services is crucial for the overall performance and functionality of the application. NATS is a high-performance messaging system t
    6 min read
  • Inter-Service Communication in Microservices
    Inter-Service Communication in Microservices explains how different services within a microservices architecture communicate with each other. In microservices, applications are broken down into smaller, independent services that work together. These services need to exchange data to function properl
    10 min read
  • Spring @Service Annotation with Example
    Spring is one of the most popular frameworks for building enterprise-level Java applications. It is an open-source, lightweight framework that simplifies the development of robust, scalable, and maintainable applications. Spring provides various features such as Dependency Injection (DI), Aspect-Ori
    4 min read
  • Managing Configuration for Microservices with Spring Cloud Config
    Spring Cloud Config provides the centralized external configuration management system and it is designed to work well with modern microservices architectures. It is the part of larger Spring Config suite of the tools that aim to help the developers built the cloud-native applications. Spring Cloud C
    4 min read
geeksforgeeks-footer-logo
Corporate & Communications Address:
A-143, 7th Floor, Sovereign Corporate Tower, Sector- 136, Noida, Uttar Pradesh (201305)
Registered Address:
K 061, Tower K, Gulshan Vivante Apartment, Sector 137, Noida, Gautam Buddh Nagar, Uttar Pradesh, 201305
GFG App on Play Store GFG App on App Store
Advertise with us
  • Company
  • About Us
  • Legal
  • Privacy Policy
  • In Media
  • Contact Us
  • Advertise with us
  • GFG Corporate Solution
  • Placement Training Program
  • Languages
  • Python
  • Java
  • C++
  • PHP
  • GoLang
  • SQL
  • R Language
  • Android Tutorial
  • Tutorials Archive
  • DSA
  • Data Structures
  • Algorithms
  • DSA for Beginners
  • Basic DSA Problems
  • DSA Roadmap
  • Top 100 DSA Interview Problems
  • DSA Roadmap by Sandeep Jain
  • All Cheat Sheets
  • Data Science & ML
  • Data Science With Python
  • Data Science For Beginner
  • Machine Learning
  • ML Maths
  • Data Visualisation
  • Pandas
  • NumPy
  • NLP
  • Deep Learning
  • Web Technologies
  • HTML
  • CSS
  • JavaScript
  • TypeScript
  • ReactJS
  • NextJS
  • Bootstrap
  • Web Design
  • Python Tutorial
  • Python Programming Examples
  • Python Projects
  • Python Tkinter
  • Python Web Scraping
  • OpenCV Tutorial
  • Python Interview Question
  • Django
  • Computer Science
  • Operating Systems
  • Computer Network
  • Database Management System
  • Software Engineering
  • Digital Logic Design
  • Engineering Maths
  • Software Development
  • Software Testing
  • DevOps
  • Git
  • Linux
  • AWS
  • Docker
  • Kubernetes
  • Azure
  • GCP
  • DevOps Roadmap
  • System Design
  • High Level Design
  • Low Level Design
  • UML Diagrams
  • Interview Guide
  • Design Patterns
  • OOAD
  • System Design Bootcamp
  • Interview Questions
  • Inteview Preparation
  • Competitive Programming
  • Top DS or Algo for CP
  • Company-Wise Recruitment Process
  • Company-Wise Preparation
  • Aptitude Preparation
  • Puzzles
  • School Subjects
  • Mathematics
  • Physics
  • Chemistry
  • Biology
  • Social Science
  • English Grammar
  • Commerce
  • World GK
  • GeeksforGeeks Videos
  • DSA
  • Python
  • Java
  • C++
  • Web Development
  • Data Science
  • CS Subjects
@GeeksforGeeks, Sanchhaya Education Private Limited, All rights reserved
We use cookies to ensure you have the best browsing experience on our website. By using our site, you acknowledge that you have read and understood our Cookie Policy & Privacy Policy
Lightbox
Improvement
Suggest Changes
Help us improve. Share your suggestions to enhance the article. Contribute your expertise and make a difference in the GeeksforGeeks portal.
geeksforgeeks-suggest-icon
Create Improvement
Enhance the article with your expertise. Contribute to the GeeksforGeeks community and help create better learning resources for all.
geeksforgeeks-improvement-icon
Suggest Changes
min 4 words, max Words Limit:1000

Thank You!

Your suggestions are valuable to us.

What kind of Experience do you want to share?

Interview Experiences
Admission Experiences
Career Journeys
Work Experiences
Campus Experiences
Competitive Exam Experiences