0
0
AzureHow-ToBeginner · 4 min read

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.