Skip to main content

How to communicate two microservices with different ports?

 When two microservices need to communicate with each other but are running on different ports, there are a few approaches :

  1. 1.Direct Communication: If the microservices are deployed on the same network or infrastructure, they can communicate directly using their network addresses. You can use HTTP or any other appropriate protocol for communication. In this approach, each microservice would need to know the network address (IP address or domain name) and the port of the other microservice.

  2. Example:

  3. Microservice A running on port 8080 wants to communicate with Microservice B running on port 9090. Microservice A can make an HTTP request to Microservice B using its network address and port:

  4. HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("http://localhost:9090/api/resource")) .build(); HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());


  5. 2.Service Discovery: Service discovery is a mechanism that allows microservices to locate and communicate with each other dynamically. Instead of hardcoding network addresses, you can utilize a service registry (e.g., Consul, Eureka, or ZooKeeper) that keeps track of available services and their network locations. Microservices can register themselves with the service registry upon startup and discover other services when needed. The service registry acts as a central point for service discovery, enabling communication between microservices regardless of their ports.

  6. Example : Microservice A and Microservice B register themselves with a service registry (e.g., Consul). When Microservice A needs to communicate with Microservice B, it queries the service registry to discover the network address and port of Microservice B dynamically:

// Pseudo code for service discovery using Consul
String serviceUrl = consulClient.lookupServiceUrl("microservice-b");
// Use serviceUrl for communication

  1. 3.API Gateway: An API gateway acts as an entry point for clients and can also help in communication between microservices. You can configure the API gateway to route requests to the appropriate microservice based on the request path or other criteria. This way, the microservices can run on different ports, but clients communicate with a single endpoint provided by the API gateway. The API gateway handles the routing and forwarding of requests to the appropriate microservice.

  2. Example:

  3. Microservice A and Microservice B run on different ports, but they are exposed through an API gateway running on port 8080. Clients make requests to the API gateway, which routes the requests to the appropriate microservice:

  4. // Request from the client to the API gateway (running on port 8080) GET http://localhost:8080/microservice-a/api/resource

The API gateway handles the request and forwards it to Microservice A running on a different port.

  1. 4.Message Queue/Message Broker: Another approach is to use a message queue or message broker system like Apache Kafka or RabbitMQ. Microservices can communicate by publishing messages to a specific topic or queue, and the receiving microservice can consume those messages from the queue. The message broker acts as an intermediary, decoupling the communication between microservices. Each microservice would need to connect to the message broker using its own port, and the broker takes care of routing messages between them.

  2. Example :

  3. Microservice A and Microservice B communicate through a message broker (e.g., Apache Kafka). Microservice A produces a message to a specific topic, and Microservice B consumes messages from that topic:


  4. // Microservice A (producer) kafkaProducer.send(new ProducerRecord<>("my-topic", "message")); // Microservice B (consumer) ConsumerRecords<String, String> records = kafkaConsumer.poll(Duration.ofMillis(100)); for (ConsumerRecord<String, String> record : records) { // Process the received message }


The choice of approach depends on factors such as the complexity of your microservices architecture, scalability requirements, and specific use cases. Consider the characteristics of your system and select the most suitable approach for your scenario.

Comments

Popular posts from this blog

Mastering Java Streams: Best Practices and Common Pitfalls

  Introduction Java Streams, introduced in Java 8, have revolutionized the way developers handle collections and data processing in Java. However, mastering Streams requires understanding not just the syntax but also the best practices and common pitfalls that can arise. In this post, we'll explore advanced tips for working with Java Streams, helping you write more efficient, readable, and maintainable code. Table of Contents Introduction to Java Streams Best Practices for Using Streams Leverage Parallel Streams Wisely Avoid State Mutations in Stream Operations Use Method References for Cleaner Code Short-Circuiting Operations for Efficiency Common Pitfalls in Java Streams Overusing Parallel Streams Modifying Collections During Stream Operations Ignoring Lazy Evaluation Improper Use of Optional with Streams Advanced Stream Operations Grouping and Partitioning Collectors and Custom Collectors FlatMap for Complex Mappings Conclusion 1. Introduction to Java Streams Java Streams provid...

Hanumankind’s ‘Run It Up’: A New Wave in Indian Hip-Hop

 Indian rapper Hanumankind, born Sooraj Cherukat, has recently released a new single titled "Run It Up," produced by Kalmi. The official music video debuted last week and showcases Hanumankind's dynamic performance style.  Prior to this release, Hanumankind gained international recognition with his 2024 hit "Big Dawgs," also produced by Kalmi. The track's innovative music video, featuring Hanumankind performing within a "well of death" motordrome, contributed to its viral success.  "Run It Up" continues Hanumankind's exploration of blending traditional Indian musical elements with contemporary hip-hop beats. The track reflects his unique style, influenced by his upbringing in both Kerala, India, and Houston, Texas.  Fans and critics have praised "Run It Up" for its energetic rhythm and catchy hooks. Discussions on platforms like Reddit highlight the song's fusion of genres and its potential to further elevate Hanumankind...

Dealing with Passwords in Java Applications: 5 Best Practices You Should Follow

 In modern Java applications—whether core Java applications or enterprise-level web applications—working with passwords is inevitable. Passwords are sensitive pieces of information, just like Social Security Numbers (SSNs), and if you’re handling real human data in systems such as online banking or healthcare portals, it’s critical to implement best practices for dealing with passwords securely. Below, I’ll share five essential best practices that I’ve learned and recommend for managing passwords, particularly when you are handling authentication and authorization. While these tips are a good starting point, be sure to tailor them to your application’s requirements and security policies. 1) Use SSL/TLS to Transfer Username and Password When users send passwords over the network, it is crucial to use SSL/TLS to encrypt the communication. This ensures that sensitive information is protected from eavesdroppers. Tools like LDAP and Active Directory are commonly used for storing usern...