Messaging Queue - Service Bus Guide

What is a Messaging Queue?
A messaging queue is a form of asynchronous service-to-service communication used in serverless and microservices architectures. It allows applications to communicate with each other by sending messages via a queue. The main benefits of using a messaging queue are decoupling of services, scalability, reliability, and load balancing.
Key Features:
Asynchronous Communication: Sender and receiver don't need to interact with the queue at the same time.
Message Persistence: Messages are stored until they are processed and acknowledged.
Decoupling: Services can operate independently, enhancing system modularity.
Scalability: Handles varying loads by distributing messages evenly.
What is Azure Service Bus?
Azure Service Bus is a fully managed enterprise message broker with message queues and publish-subscribe topics. It ensures reliable communication between applications and services, even when they are running on different continents or using different programming languages.
Key Features:
Message Queues: Enable one-to-one communication.
Topics and Subscriptions: Facilitate one-to-many communication.
Advanced Messaging: Supports features like dead-lettering, transactions, and message sessions.
Security: Provides robust security with Shared Access Signature (SAS) and Azure Active Directory (AAD) integration.
Advantages of Azure Service Bus
Reliability: Guarantees message delivery with retry policies.
Decoupling: Allows independent scaling of different parts of an application.
Flexibility: Supports complex message routing with topics and subscriptions.
Integration: Seamlessly integrates with other Azure services.
Scalability: Can handle large-scale messaging operations.
Comparison with Other Messaging Queues:
RabbitMQ: An open-source message broker with extensive protocol support. Azure Service Bus is better for cloud-native applications due to its seamless Azure integration.
Apache Kafka: Designed for high-throughput, distributed messaging, ideal for stream processing. Azure Service Bus is more suitable for enterprise integration patterns.
Amazon SQS: Simple, reliable, and cost-effective messaging service. Azure Service Bus offers more advanced features like topics and transactions.
Procedure for Using Azure Service Bus in Node.js
Step 1: Install the Package
npm install @azure/service-bus
Step 2: Create a Service Bus Client
Create a client that connects to your Azure Service Bus instance using a connection string.
import { ServiceBusClient } from '@azure/service-bus';
const serviceBusClient = new ServiceBusClient(process.env.SERVICE_BUS_CONNECTION_STRING);
export default serviceBusClient;
This client can be reused across your application for sending and receiving messages.
Step 3: Creating a Sender
A sender is responsible for sending messages to a queue or topic.
async function sendMessage() {
const sender = serviceBusClient.createSender('my-queue');
const message = {
body: "Hello, Service Bus!",
contentType: "application/json"
};
try {
await sender.sendMessages(message);
console.log("Message sent successfully.");
} finally {
await sender.close();
}
}
sendMessage().catch((err) => {
console.log("Error sending message: ", err);
});
Step 4: Creating a Receiver
A receiver listens for messages from a queue or subscription.
async function receiveMessages() {
const receiver = serviceBusClient.createReceiver('my-queue');
const messages = await receiver.receiveMessages(10, { maxWaitTimeInMs: 5000 });
for (const message of messages) {
console.log(`Received message: ${message.body}`);
await receiver.completeMessage(message);
}
await receiver.close();
}
receiveMessages().catch((err) => {
console.log("Error receiving messages: ", err);
});
Sender and Receiver
Sender: Sends messages to a queue or topic. It can send a single message or a batch of messages, ensuring they reach the queue reliably.
Receiver: Listens to messages from a queue or subscription. It processes incoming messages and can acknowledge them to prevent re-delivery.
Use Cases:
Sender: Used for creating workflows, processing user actions, or batch processing tasks.
Receiver: Suitable for background processing, event-driven architectures, and ensuring order processing or transaction execution.
Subscribe to my newsletter
Read articles from Muhammad Sufiyan directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

Muhammad Sufiyan
Muhammad Sufiyan
As a former 3D Animator with more than 12 years of experience, I have always been fascinated by the intersection of technology and creativity. That's why I recently shifted my career towards MERN stack development and software engineering, where I have been serving since 2021. With my background in 3D animation, I bring a unique perspective to software development, combining creativity and technical expertise to build innovative and visually engaging applications. I have a passion for learning and staying up-to-date with the latest technologies and best practices, and I enjoy collaborating with cross-functional teams to solve complex problems and create seamless user experiences. In my current role as a MERN stack developer, I have been responsible for developing and implementing web applications using MongoDB, Express, React, and Node.js. I have also gained experience in Agile development methodologies, version control with Git, and cloud-based deployment using platforms like Heroku and AWS. I am committed to delivering high-quality work that meets the needs of both clients and end-users, and I am always seeking new challenges and opportunities to grow both personally and professionally.