Skip to content
geeksforgeeks
  • Tutorials
    • Python
    • Java
    • Data Structures & Algorithms
    • ML & Data Science
    • Interview Corner
    • Programming Languages
    • Web Development
    • CS Subjects
    • DevOps And Linux
    • School Learning
    • Practice Coding Problems
  • 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
  • Java Arrays
  • Java Strings
  • Java OOPs
  • Java Collection
  • Java 8 Tutorial
  • Java Multithreading
  • Java Exception Handling
  • Java Programs
  • Java Project
  • Java Collections Interview
  • Java Interview Questions
  • Java MCQs
  • Spring
  • Spring MVC
  • Spring Boot
  • Hibernate
Open In App

Different Ways to Establish Communication Between Spring Microservices

Last Updated : 30 Jan, 2022
Comments
Improve
Suggest changes
Like Article
Like
Report

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's understand the use-case first.  There are two microservices:

  1. Restaurant-Service: Responsible for maintaining items being served by a restaurant, processing orders, etc.
  2. User-Service: Responsible for maintaining user details.

Now suppose a user visits a restaurant's page, selects some cuisine of his choice and clicks on the "Place Order" button. When this request lands in restaurant-service, the service would want to validate user details before processing this order. But our user details lie under user-service. Hence here comes the need to communicate from restaurant-service to user-service. Synchronous communication of m2 from m1 is like calling an API of m2 directly from m1.

Synchronous Way

When we talk about synchronous communication, there could be two ways:

  1. REST Template
  2. Feign

REST Template

REST Template is the easiest way to establish synchronous communication from m1 to m2. RestTemplate is a class available under spring.framework.web.client that acts as a synchronous client to perform HTTP requests. In the below example, we have used  getForEntity method that accepts complete URL of the user-service that we want to invoke, followed by Data-Object class name which that URL is supposed to return, and a map. If the provided userId is not valid, the API call would throw a custom exception which we are handing on the restaurant-service side.

Java
HashMap<String, Long> params = new HashMap<>(); params.put("userId", orderDetails.getUserId()); try {     ResponseEntity<User> response         = new RestTemplate().getForEntity(             "http://localhost:8080/users/{userId}",             User.class, params); } catch (Exception ex) {     throw new InvalidUserIdException(         "User Id " + orderDetails.getUserId()         + " Not Found"); } 

Feign

Feign requires additional configuration across both services if you want to go by this way. This approach uses standard Java interfaces. Addition perks of using feign over rest-template is that you don't get to hard-code your URL here. Eureka Client ID can also be used for server-discovery purposes in order to establish communication.

Asynchronous Way

One possible asynchronous way to establish communication is by using a message broker. Let's understand the use-case first.

Considering the microservices discussed above, let's suppose a user has placed his order. Now the order would go under various stages like Accepted, Preparation-Started, Ready-To-Pick, Delivered. Assuming all the stages of the order would be updated by the restaurant-service, we want to notify user-service every time the order-status is updated. Now this can be achieved either way but the asynchronous way would be more convenient here.

  • Message-Broker: It behaves as an intermediary service between m1 and m2. When m1 has to communicate with m2, m1 would push a message to the broker instead of directly sending it to the m2. Depending on the broker's type (ActiveMQ and Kafka are two popular message-brokers but they have different approaches of communication), the message will be conveyed to the listener of m2 and action would be taken accordingly. Here m1 would be known as producer while m2 would be known as consumer.

G

Gaurav Raj 1
Improve
Article Tags :
  • Java
  • Java-Spring
Practice Tags :
  • Java

Similar Reads

    How to create a basic application in Java Spring Boot
    Spring Boot is the most popular Java framework that is used for developing RESTful web applications. In this article, we will see how to create a basic Spring Boot application.Spring Initializr is a web-based tool using which we can easily generate the structure of the Spring Boot project. It also p
    3 min read
    How to Create a REST API using Java Spring Boot?
    Representational State Transfer (REST) is a software architectural style that defines a set of constraints for creating web services. RESTful web services allow systems to access and manipulate web resources through a uniform and predefined set of stateless operations. Unlike SOAP, which exposes its
    4 min read
    Easiest Way to Create REST API using Spring Boot
    Spring Boot is a powerful framework that makes it easy to create RESTful APIs. Creating a REST API using Spring Boot is one of the fastest and simplest ways to develop scalable and production-ready web services. Spring Boot simplifies REST API development by providing built-in features such as autom
    10 min read
    Java Spring Boot Microservices Sample Project
    Microservices are more popular nowadays. They can be written in any language. In this article, let us see Spring Boot Microservices. in this article let us see a base project "currency-exchange-sample-service" which has a business logic and which can be invoked in another project "currency-conversio
    9 min read
    Difference between Spring MVC and Spring Boot
    1. Spring MVC : Spring is widely used for creating scalable applications. For web applications Spring provides Spring MVC framework which is a widely used module of spring which is used to create scalable web applications. Spring MVC framework enables the separation of modules namely Model View, Con
    3 min read
    Spring Boot - Spring JDBC vs Spring Data JDBC
    Understanding the difference between Spring JDBC and Spring Data JDBC is important for choosing the right approach to interact with relational databases in Spring Boot applications. Both frameworks serve the same purpose but differ significantly in terms of abstraction, ease of use, and developer pr
    5 min read
    Best Practices For Structuring Spring Boot Application
    Spring Boot is built on top of the conventional spring framework. So, it provides all the features of spring and is yet easier to use than spring. In this article, we are going to see how one should start and structure his Spring Boot application. Prerequisites: Good knowledge of Java.Basic knowledg
    3 min read
    Spring Boot - Start/Stop a Kafka Listener Dynamically
    In a Spring Boot application, Kafka Listeners start automatically once the application launches and they listen for messages from Kafka topics. But there are many scenarios where we might need to dynamically start or stop a Kafka listener based on certain conditions. This can be achieved using Kafka
    6 min read
    How To Dockerize A Spring Boot Application With Maven ?
    Docker is an open-source containerization tool that is used for building, running, and managing applications in an isolated environment. It facilitates the developers to bundles its software, libraries, and configuration files. The Docker facilitates with isolating the one container from another. In
    12 min read
    Dynamic Dropdown From Database using Spring Boot
    The concept of dynamic dropdown (or dependent dropdown) is exciting and challenging to code. Dynamic dropdown means that the values in one dropdown list are dependent on the value selected in the previous dropdown list. A simple example would be three dropdown boxes displaying names of the district,
    11 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