How to Use Azure Service Bus Topic: Simple Guide
To use an
Azure Service Bus Topic, create a topic in your Service Bus namespace, then send messages to it. Subscribers can receive messages from the topic using subscriptions, enabling multiple receivers to get copies of the messages.Syntax
An Azure Service Bus Topic is a messaging entity that allows sending messages to multiple subscribers. The main parts are:
- Namespace: Your Service Bus container.
- Topic: The message channel where messages are sent.
- Subscription: Named receivers that get copies of messages from the topic.
- Sender: The client that sends messages to the topic.
- Receiver: The client that listens to a subscription to receive messages.
javascript
const { ServiceBusClient } = require("@azure/service-bus"); const connectionString = "<Your-Service-Bus-Connection-String>"; const topicName = "<Your-Topic-Name>"; const subscriptionName = "<Your-Subscription-Name>"; // Create a Service Bus client const sbClient = new ServiceBusClient(connectionString); // Sender to send messages to the topic const sender = sbClient.createSender(topicName); // Receiver to receive messages from a subscription const receiver = sbClient.createReceiver(topicName, subscriptionName);
Example
This example shows how to send a message to a topic and receive it from a subscription using Node.js SDK.
javascript
const { ServiceBusClient } = require("@azure/service-bus"); async function main() { const connectionString = "<Your-Service-Bus-Connection-String>"; const topicName = "mytopic"; const subscriptionName = "mysubscription"; const sbClient = new ServiceBusClient(connectionString); const sender = sbClient.createSender(topicName); const receiver = sbClient.createReceiver(topicName, subscriptionName); // Send a message await sender.sendMessages({ body: "Hello, Service Bus Topic!" }); console.log("Message sent to topic."); // Receive messages const messages = await receiver.receiveMessages(1, { maxWaitTimeInMs: 5000 }); for (const message of messages) { console.log(`Received message: ${message.body}`); await receiver.completeMessage(message); } await sender.close(); await receiver.close(); await sbClient.close(); } main().catch((err) => { console.error("Error occurred: ", err); });
Output
Message sent to topic.
Received message: Hello, Service Bus Topic!
Common Pitfalls
- Not creating subscriptions before receiving messages causes errors because subscriptions define the message receivers.
- Forgetting to complete messages after processing leads to message redelivery.
- Using the topic name instead of subscription name when receiving messages will fail.
- Not closing clients can cause resource leaks.
javascript
/* Wrong: Receiving from topic without subscription */ const receiver = sbClient.createReceiver(topicName); // Missing subscription name /* Right: Specify subscription name */ const receiver = sbClient.createReceiver(topicName, subscriptionName);
Quick Reference
Remember these key points when using Service Bus Topics:
- Use
createSender(topicName)to send messages. - Use
createReceiver(topicName, subscriptionName)to receive messages. - Always complete messages after processing with
completeMessage(). - Close senders, receivers, and clients to free resources.
Key Takeaways
Create subscriptions before receiving messages from a topic.
Send messages using a sender client targeting the topic.
Receive messages from subscriptions, not directly from the topic.
Complete messages after processing to avoid duplicates.
Always close clients to release resources.