Introduction Sometimes, one service needs to send a request and wait for a reply from another service. This is called Remote Procedure Call (RPC). RabbitMQ can be used to build an RPC pattern. Even though RabbitMQ is normally used for async messaging, with the right setup we can also support request/response workflows.
RabbitMQ vs Kafka: Choosing the Right Messaging System for Your Project
Modern applications often need to pass data between services in a reliable and scalable way. Two of the most popular messaging systems are RabbitMQ and Apache Kafka. At first look, both do the same thing: move messages from one place to another. But in reality, they are built for different goals and have very different…
Scaling Microservices with RabbitMQ: Patterns and Best Practices
When microservices grow, we need to scale them so they can handle more traffic, new features, and spikes. RabbitMQ helps by decoupling services and buffering work with queues. This reduces direct pressure on APIs and databases, and makes it easier to add more workers when needed. This guide explains how to scale with RabbitMQ using…
Dead Letter Queues in RabbitMQ: How to Handle Failed Messages
In messaging systems, not every message can be processed successfully. Some messages may be invalid, expired, or cause errors in consumers. Instead of losing these messages, RabbitMQ provides a feature called the Dead Letter Queue (DLQ). DLQs allow you to capture, inspect, and handle failed messages safely. By default, any message that is rejected with…
Understanding RabbitMQ Exchange Types with Go: Default, Direct, Fanout, and Topic
RabbitMQ is one of the most popular message brokers for building distributed systems. It allows applications to communicate asynchronously by sending and receiving messages through queues. At the heart of RabbitMQ is the concept of an exchange, which decides how messages flow from producers (publishers) to consumers. This article explains RabbitMQ’s most common exchange types…
Reliable Messaging with RabbitMQ: Acknowledgments, Durability, and Persistence
One of the main reasons people use RabbitMQ is reliability. In many systems, losing a message is not acceptable. Imagine if an order is placed in an e-commerce system but disappears before the payment service sees it, that would be a big problem. RabbitMQ offers three important features to ensure reliable messaging: Acknowledgments, Durability, and…
Scalability and Reliability in NATS
Object Store in NATS: Storing Files and Blobs
In the last article, we talked about the NATS Key-Value Store (KV), which is great for lightweight configuration and state management. But what if you need to store something larger, like a file, image, or binary data? For that, NATS provides the Object Store, also built on top of JetStream.
Key-Value Store in NATS: Simple State Management
So far, we’ve looked at different messaging patterns in NATS like Publish–Subscribe, Request–Reply, and Queue Groups. Those patterns are great for communication, but sometimes you need a way to store small pieces of state that services can read, update, or watch for changes. NATS provides this through its Key-Value Store (KV), built on top of…