Proposed Pull Request Change

title description author ms.author ms.date ms.topic ms.devlang ms.custom
Get Started with Azure Service Bus Queues (Python) This quickstart shows you how to send messages to and receive messages from Azure Service Bus queues using the Python programming language. spelluru spelluru 06/11/2025 quickstart python ['devx-track-python', 'mode-api', 'passwordless-python', 'sfi-ropc-nochange']
📄 Document Links
GitHub View on GitHub Microsoft Learn View on Microsoft Learn
Raw New Markdown
Generating updated version of doc...
Rendered New Markdown
Generating updated version of doc...
+0 -0
+0 -0
--- title: Get Started with Azure Service Bus Queues (Python) description: This quickstart shows you how to send messages to and receive messages from Azure Service Bus queues using the Python programming language. author: spelluru ms.author: spelluru ms.date: 06/11/2025 ms.topic: quickstart ms.devlang: python ms.custom: - devx-track-python - mode-api - passwordless-python - sfi-ropc-nochange #customer intent: As a developer, I want to learn how to send and receive messages with Azure Service Bus queues by using the Python programming language. --- # Quickstart: Send messages to and receive messages from Azure Service Bus queues (Python) > [!div class="op_single_selector" title1="Select the programming language:"] > - [C#](service-bus-dotnet-get-started-with-queues.md) > - [Java](service-bus-java-how-to-use-queues.md) > - [JavaScript](service-bus-nodejs-how-to-use-queues.md) > - [Python](service-bus-python-how-to-use-queues.md) This article provides step-by-step instructions for a simple scenario of sending messages to a Service Bus queue and receiving them. You can find prebuilt JavaScript and TypeScript samples for Azure Service Bus in the [Azure SDK for Python repository on GitHub](https://github.com/azure/azure-sdk-for-python/tree/main/sdk/servicebus/azure-servicebus/samples). In this quickstart, you: - Create a Service Bus namespace, using the Azure portal. - Create a Service Bus queue, using the Azure portal. - Write Python code to use the [azure-servicebus](https://pypi.org/project/azure-servicebus/) package to: - Send a set of messages to the queue. - Receive those messages from the queue. If you're new to the service, see [Service Bus overview](service-bus-messaging-overview.md) before you begin. ## Prerequisites - An Azure subscription. To complete this quickstart, you need an Azure account. You can activate your [Monthly Azure credits for Visual Studio subscribers](https://azure.microsoft.com/pricing/member-offers/credit-for-visual-studio-subscribers/?WT.mc_id=A85619ABF) or sign-up for a [free account](https://azure.microsoft.com/pricing/purchase-options/azure-account?cid=msft_learn). - [Python 3.8](https://www.python.org/downloads/) or higher. ### [Passwordless (Recommended)](#tab/passwordless) To use this quickstart with your own Azure account: - Install [Azure CLI](/cli/azure/install-azure-cli), which provides the passwordless authentication to your developer machine. - Sign in with your Azure account at the terminal or command prompt with `az login`. - Use the same account when you add the appropriate data role to your resource. - Run the code in the same terminal or command prompt. - Note the **queue** name for your Service Bus namespace. You need that in the code. ### [Connection string](#tab/connection-string) Note the following values, which you use in the code: - Service Bus namespace **connection string** - Service Bus namespace **queue** you created --- This quickstart works with samples that you can copy and run using Python. For instructions on how to create a Python application, see [Quickstart: Deploy a Python web app to Azure App Service](../app-service/quickstart-python.md). For more information about installing packages used in this quickstart, see [How to install Azure library packages for Python](/azure/developer/python/sdk/azure-sdk-install). [!INCLUDE [service-bus-create-namespace-portal](./includes/service-bus-create-namespace-portal.md)] [!INCLUDE [service-bus-create-queue-portal](./includes/service-bus-create-queue-portal.md)] [!INCLUDE [service-bus-passwordless-template-tabbed](../../includes/passwordless/service-bus/service-bus-passwordless-template-tabbed.md)] ## Use pip to install packages ### [Passwordless (Recommended)](#tab/passwordless) 1. To install the required Python packages for this Service Bus quickstart, open a Command Prompt window that has Python in its path. 1. Change the directory to the folder where you want to have your samples. 1. Install the following packages: ```shell pip install azure-servicebus pip install azure-identity pip install aiohttp ``` ### [Connection string](#tab/connection-string) 1. To install the required Python packages for this Service Bus quickstart, open a Command Prompt window that has Python in its path. 1. Change the directory to the folder where you want to have your samples. 1. Install the following package: ```bash pip install azure-servicebus ``` --- ## Send messages to a queue The following sample code shows you how to send a message to a queue. Open a text editor, such as [Visual Studio Code](https://code.visualstudio.com/), create a file *send.py*, and add the following code into it. ### [Passwordless (Recommended)](#tab/passwordless) 1. Add import statements. ```python import asyncio from azure.servicebus.aio import ServiceBusClient from azure.servicebus import ServiceBusMessage from azure.identity.aio import DefaultAzureCredential ``` 1. Add constants and define a credential. ```python FULLY_QUALIFIED_NAMESPACE = "FULLY_QUALIFIED_NAMESPACE" QUEUE_NAME = "QUEUE_NAME" credential = DefaultAzureCredential() ``` > [!IMPORTANT] > - Replace `FULLY_QUALIFIED_NAMESPACE` with the fully qualified namespace for your Service Bus namespace. > - Replace `QUEUE_NAME` with the name of the queue. 1. Add a method to send a single message. ```python async def send_single_message(sender): # Create a Service Bus message and send it to the queue message = ServiceBusMessage("Single Message") await sender.send_messages(message) print("Sent a single message") ``` The sender is an object that acts as a client for the queue you created. You create it later and send as an argument to this function. 1. Add a method to send a list of messages. ```python async def send_a_list_of_messages(sender): # Create a list of messages and send it to the queue messages = [ServiceBusMessage("Message in list") for _ in range(5)] await sender.send_messages(messages) print("Sent a list of 5 messages") ``` 1. Add a method to send a batch of messages. ```python async def send_batch_message(sender): # Create a batch of messages async with sender: batch_message = await sender.create_message_batch() for _ in range(10): try: # Add a message to the batch batch_message.add_message(ServiceBusMessage("Message inside a ServiceBusMessageBatch")) except ValueError: # ServiceBusMessageBatch object reaches max_size. # New ServiceBusMessageBatch object can be created here to send more data. break # Send the batch of messages to the queue await sender.send_messages(batch_message) print("Sent a batch of 10 messages") ``` 1. Create a Service Bus client and then a queue sender object to send messages. ```python async def run(): # create a Service Bus client using the credential async with ServiceBusClient( fully_qualified_namespace=FULLY_QUALIFIED_NAMESPACE, credential=credential, logging_enable=True) as servicebus_client: # get a Queue Sender object to send messages to the queue sender = servicebus_client.get_queue_sender(queue_name=QUEUE_NAME) async with sender: # send one message await send_single_message(sender) # send a list of messages await send_a_list_of_messages(sender) # send a batch of messages await send_batch_message(sender) # Close credential when no longer needed. await credential.close() ``` 1. Call the `run` method and print a message. ```python asyncio.run(run()) print("Done sending messages") print("-----------------------") ``` ### [Connection string](#tab/connection-string) 1. Add import statements. ```python import asyncio from azure.servicebus.aio import ServiceBusClient from azure.servicebus import ServiceBusMessage ``` 1. Add constants. ```python NAMESPACE_CONNECTION_STR = "NAMESPACE_CONNECTION_STR" QUEUE_NAME = "QUEUE_NAME" ``` > [!IMPORTANT] > - Replace `NAMESPACE_CONNECTION_STR` with the connection string for your Service Bus namespace. > - Replace `QUEUE_NAME` with the name of the queue. 1. Add a method to send a single message. ```python async def send_single_message(sender): # Create a Service Bus message and send it to the queue message = ServiceBusMessage("Single Message") await sender.send_messages(message) print("Sent a single message") ``` The sender is an object that acts as a client for the queue you created. You create it later and send as an argument to this function. 1. Add a method to send a list of messages. ```python async def send_a_list_of_messages(sender): # Create a list of messages and send it to the queue messages = [ServiceBusMessage("Message in list") for _ in range(5)] await sender.send_messages(messages) print("Sent a list of 5 messages") ``` 1. Add a method to send a batch of messages. ```python async def send_batch_message(sender): # Create a batch of messages async with sender: batch_message = await sender.create_message_batch() for _ in range(10): try: # Add a message to the batch batch_message.add_message(ServiceBusMessage("Message inside a ServiceBusMessageBatch")) except ValueError: # ServiceBusMessageBatch object reaches max_size. # New ServiceBusMessageBatch object can be created here to send more data. break # Send the batch of messages to the queue await sender.send_messages(batch_message) print("Sent a batch of 10 messages") ``` 1. Create a Service Bus client and then a queue sender object to send messages. ```python async def run(): # create a Service Bus client using the connection string async with ServiceBusClient.from_connection_string( conn_str=NAMESPACE_CONNECTION_STR, logging_enable=True) as servicebus_client: # Get a Queue Sender object to send messages to the queue sender = servicebus_client.get_queue_sender(queue_name=QUEUE_NAME) async with sender: # Send one message await send_single_message(sender) # Send a list of messages await send_a_list_of_messages(sender) # Send a batch of messages await send_batch_message(sender) ``` 1. Call the `run` method and print a message. ```python asyncio.run(run()) print("Done sending messages") print("-----------------------") ``` --- ## Receive messages from a queue The following sample code shows you how to receive messages from a queue. The code shown receives new messages until it doesn't receive any new messages for 5 (`max_wait_time`) seconds. Open a text editor, such as [Visual Studio Code](https://code.visualstudio.com/), create a file *recv.py*, and add the following code to it. ### [Passwordless (Recommended)](#tab/passwordless) 1. Similar to the *send.py* sample, add `import` statements. Replace the constants with your own values and define a credential. ```python import asyncio from azure.servicebus.aio import ServiceBusClient from azure.identity.aio import DefaultAzureCredential FULLY_QUALIFIED_NAMESPACE = "FULLY_QUALIFIED_NAMESPACE" QUEUE_NAME = "QUEUE_NAME" credential = DefaultAzureCredential() ``` 1. Create a Service Bus client and then a queue receiver object to receive messages. ```python async def run(): # create a Service Bus client using the connection string async with ServiceBusClient( fully_qualified_namespace=FULLY_QUALIFIED_NAMESPACE, credential=credential, logging_enable=True) as servicebus_client: async with servicebus_client: # get the Queue Receiver object for the queue receiver = servicebus_client.get_queue_receiver(queue_name=QUEUE_NAME) async with receiver: received_msgs = await receiver.receive_messages(max_wait_time=5, max_message_count=20) for msg in received_msgs: print("Received: " + str(msg)) # complete the message so that the message is removed from the queue await receiver.complete_message(msg) # Close credential when no longer needed. await credential.close() ``` 1. Call the `run` method. ```python asyncio.run(run()) ``` ### [Connection string](#tab/connection-string) 1. Similar to the *send.py* sample, add `import` statements and define constants that use your own values. ```python import asyncio from azure.servicebus.aio import ServiceBusClient NAMESPACE_CONNECTION_STR = "NAMESPACE_CONNECTION_STR" QUEUE_NAME = "QUEUE_NAME" ``` 1. Create a Service Bus client and then a queue receiver object to receive messages. ```python async def run(): # create a Service Bus client using the connection string async with ServiceBusClient.from_connection_string( conn_str=NAMESPACE_CONNECTION_STR, logging_enable=True) as servicebus_client: async with servicebus_client: # get the Queue Receiver object for the queue receiver = servicebus_client.get_queue_receiver(queue_name=QUEUE_NAME) async with receiver: received_msgs = await receiver.receive_messages(max_wait_time=5, max_message_count=20) for msg in received_msgs: print("Received: " + str(msg)) # complete the message so that the message is removed from the queue await receiver.complete_message(msg) ``` 1. Call the `run` method. ```python asyncio.run(run()) ``` --- ## Run the app Open a command prompt that has Python in its path, and then run the code to send and receive messages from the queue. ```shell python send.py; python recv.py ``` You should see the following output: ```console Sent a single message Sent a list of 5 messages Sent a batch of 10 messages Done sending messages ----------------------- Received: Single Message Received: Message in list Received: Message in list Received: Message in list Received: Message in list Received: Message in list Received: Message inside a ServiceBusMessageBatch Received: Message inside a ServiceBusMessageBatch Received: Message inside a ServiceBusMessageBatch Received: Message inside a ServiceBusMessageBatch Received: Message inside a ServiceBusMessageBatch Received: Message inside a ServiceBusMessageBatch Received: Message inside a ServiceBusMessageBatch Received: Message inside a ServiceBusMessageBatch Received: Message inside a ServiceBusMessageBatch Received: Message inside a ServiceBusMessageBatch ``` In the Azure portal, navigate to your Service Bus namespace. On the **Overview** page, verify that the **incoming** and **outgoing** message counts are 16. If you don't see the counts, wait few minutes, then refresh the page. :::image type="content" source="./media/service-bus-python-how-to-use-queues/overview-incoming-outgoing-messages.png" alt-text="Incoming and outgoing message count"::: Select the queue on this **Overview** page to navigate to the **Service Bus Queue** page. You can also see the **incoming** and **outgoing** message count on this page. You also see other information such as the **current size** of the queue and **active message count**. :::image type="content" source="./media/service-bus-python-how-to-use-queues/queue-details.png" alt-text="Queue details"::: ## Related content See the following documentation and samples: - [Azure Service Bus client library for Python](https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/servicebus/azure-servicebus) - [Samples](https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/servicebus/azure-servicebus/samples) - The **sync_samples** folder has samples that show you how to interact with Service Bus in a synchronous manner. - The **async_samples** folder has samples that show you how to interact with Service Bus in an asynchronous manner. In this quick start, you used this method. - [azure-servicebus reference documentation](/python/api/azure-servicebus/azure.servicebus?preserve-view=true)
Success! Branch created successfully. Create Pull Request on GitHub
Error: