Home > OS >  Azure Servicebus - get all available topics in python
Azure Servicebus - get all available topics in python

Time:01-08

I have an Azure Servicebus and want to retrieve all topics that are available based on my connection string.

In the Microsoft docs I was able to see that there is a "GetTopics" function for C# - is there something similar available within the Python SDK? I cant find anything in the source code of the azure-sdk-for-python....

CONNECTION_STR = "XXX"
servicebus_client = ServiceBusClient.from_connection_string(conn_str=CONNECTION_STR, logging_enable=True)
servicebus_client.gettopics() # function does not exist in Python

Clarification: I do not know the topic names and want to know which ones are available at the ServiceBusClient!

CodePudding user response:

The method you are looking for is list_topics in ServiceBusAdministrationClient class.

Here's the sample code taken from here:

import os
import uuid
import datetime
from azure.servicebus.management import ServiceBusAdministrationClient

CONNECTION_STR = os.environ['SERVICE_BUS_CONNECTION_STR']

def list_topics(servicebus_mgmt_client):
    print("-- List Topics")
    for topic_properties in servicebus_mgmt_client.list_topics():
        print("Topic Name:", topic_properties.name)
    print("")

with ServiceBusAdministrationClient.from_connection_string(CONNECTION_STR) as servicebus_mgmt_client:
    list_topics(servicebus_mgmt_client)

CodePudding user response:

It is available as get_topic() in V0.50:

client = ServiceBusClient.from_connection_string(connstr)

# for queues
queue_client = client.get_queue(queue_name)
queue_sender = queue_client.get_sender()
queue_receiver = queue_client.get_receiver()
queue_dead_letter_receiver = queue_client.get_deadletter_receiver()

# for topics
topic_client = client.get_topic(topic_name)
topic_sender = topic_client.get_sender()

# for subscription
subscription_client = client.get_subscription(topic_name, subscription_name)
subscription_receiver = subscription_client.get_receiver()
subscription_dead_letter_receiver = subscription_client.get_deadletter_receiver()

It is available as get_topic_sender() in V7:

with ServiceBusClient.from_connection_string(connstr) as client:

    # for queues
    queue_sender = client.get_queue_sender(queue_name)
    queue_receiver = client.get_queue_receiver(queue_name)
    queue_dead_letter_receiver = client.get_queue_receiver(queue_name, sub_queue=ServiceBusSubQueue.DEAD_LETTER)

    # for topics
    topic_sender = client.get_topic_sender(topic_name)

    # for subscription
    subscription_receiver = client.get_subscription_receiver(topic_name, subscription_name)
    subscription_dead_letter_receiver = client.get_subscription_receiver(topic_name, subscription_name, sub_queue=ServiceBusSubQueue.DEAD_LETTER)

You can refer to Azure servicebus - Creating sender and receivers

  •  Tags:  
  • Related