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
