Berichten verzenden naar een Azure Service Bus-onderwerp en berichten ontvangen van abonnementen op het onderwerp (Python)
In dit artikel wordt beschreven hoe u met Python berichten verzendt naar een Service Bus-onderwerp en berichten ontvangt van het abonnement op het onderwerp.
Notitie
Deze quickstart bevat stapsgewijs instructies voor een eenvoudig scenario voor het verzenden van een batch berichten naar een Service Bus-onderwerp en het ontvangen van die berichten van een abonnement van het onderwerp. U vindt vooraf gebouwde JavaScript- en TypeScript-voorbeelden voor Azure Service Bus in de Azure SDK voor Python-opslagplaats op GitHub.
Vereisten
- Een Azure-abonnement. U kunt uw voordelen als Visual Studio- of MSDN-abonnee activeren of u aanmelden voor een gratis account.
- Volg de stappen in de Quickstart: Gebruik Azure Portal om een Service Bus-onderwerp en abonnementen voor het onderwerp te maken. Noteer de verbindingsreeks, onderwerpnaam en abonnementsnaam. U gebruikt slechts één abonnement voor deze quickstart.
- Python 3.5 of hoger, met het [Azure Python SDK][Azure Python-pakket] geïnstalleerd. Raadpleeg de Python-installatiehandleiding voor meer informatie.
Berichten verzenden naar een onderwerp
Voeg de volgende importeerinstructie toe.
from azure.servicebus import ServiceBusClient, ServiceBusMessageVoeg de volgende constanten toe.
CONNECTION_STR = "<NAMESPACE CONNECTION STRING>" TOPIC_NAME = "<TOPIC NAME>" SUBSCRIPTION_NAME = "<SUBSCRIPTION NAME>"Belangrijk
- Vervang
<NAMESPACE CONNECTION STRING>door de verbindingsreeks voor uw naamruimte. - Vervang
<TOPIC NAME>door de naam van het onderwerp. - Vervang
<SUBSCRIPTION NAME>door de naam van het abonnement op het onderwerp.
- Vervang
Voeg een methode voor het verzenden van één bericht toe.
def send_single_message(sender): # create a Service Bus message message = ServiceBusMessage("Single Message") # send the message to the topic sender.send_messages(message) print("Sent a single message")De afzender is een object dat fungeert als een client voor het onderwerp dat u hebt gemaakt. U maakt en verzendt deze later als een argument voor deze functie.
Voeg een methode voor het verzenden van een lijst met berichten toe.
def send_a_list_of_messages(sender): # create a list of messages messages = [ServiceBusMessage("Message in list") for _ in range(5)] # send the list of messages to the topic sender.send_messages(messages) print("Sent a list of 5 messages")Voeg een methode voor het verzenden van een batch met berichten toe.
def send_batch_message(sender): # create a batch of messages batch_message = 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 topic sender.send_messages(batch_message) print("Sent a batch of 10 messages")Maak een Service Bus-client en vervolgens een object voor de afzender van het onderwerp om berichten te verzenden.
# create a Service Bus client using the connection string servicebus_client = ServiceBusClient.from_connection_string(conn_str=CONNECTION_STR, logging_enable=True) with servicebus_client: # get a Topic Sender object to send messages to the topic sender = servicebus_client.get_topic_sender(topic_name=TOPIC_NAME) with sender: # send one message send_single_message(sender) # send a list of messages send_a_list_of_messages(sender) # send a batch of messages send_batch_message(sender) print("Done sending messages") print("-----------------------")
Berichten van een abonnement ontvangen
Voeg de volgende code toe achter de afdrukinstructie. Deze code ontvangt voortdurend nieuwe berichten totdat er geen nieuwe berichten meer worden ontvangen gedurende 5 seconden (max_wait_time).
with servicebus_client:
# get the Subscription Receiver object for the subscription
receiver = servicebus_client.get_subscription_receiver(topic_name=TOPIC_NAME, subscription_name=SUBSCRIPTION_NAME, max_wait_time=5)
with receiver:
for msg in receiver:
print("Received: " + str(msg))
# complete the message so that the message is removed from the subscription
receiver.complete_message(msg)
Volledige code
from azure.servicebus import ServiceBusClient, ServiceBusMessage
CONNECTION_STR = "<NAMESPACE CONNECTION STRING>"
TOPIC_NAME = "<TOPIC NAME>"
SUBSCRIPTION_NAME = "<SUBSCRIPTION NAME>"
def send_single_message(sender):
message = ServiceBusMessage("Single Message")
sender.send_messages(message)
print("Sent a single message")
def send_a_list_of_messages(sender):
messages = [ServiceBusMessage("Message in list") for _ in range(5)]
sender.send_messages(messages)
print("Sent a list of 5 messages")
def send_batch_message(sender):
batch_message = sender.create_message_batch()
for _ in range(10):
try:
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
sender.send_messages(batch_message)
print("Sent a batch of 10 messages")
servicebus_client = ServiceBusClient.from_connection_string(conn_str=CONNECTION_STR, logging_enable=True)
with servicebus_client:
sender = servicebus_client.get_topic_sender(topic_name=TOPIC_NAME)
with sender:
send_single_message(sender)
send_a_list_of_messages(sender)
send_batch_message(sender)
print("Done sending messages")
print("-----------------------")
with servicebus_client:
receiver = servicebus_client.get_subscription_receiver(topic_name=TOPIC_NAME, subscription_name=SUBSCRIPTION_NAME, max_wait_time=5)
with receiver:
for msg in receiver:
print("Received: " + str(msg))
receiver.complete_message(msg)
De app uitvoeren
Wanneer u de toepassing uitvoert, wordt de volgende uitvoer weergegeven:
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
Ga in Azure Portal naar uw Service Bus-naamruimte. Controleer op de pagina Overzicht of er 16 inkomende en uitgaande berichten zijn. Als u de tellingen niet ziet, wacht u een paar minuten en vernieuwt u de pagina.
Selecteer het onderwerp in het onderste deelvenster om de pagina Service Bus-onderwerp voor uw onderwerp weer te geven. Op deze pagina ziet u drie inkomende en drie uitgaande berichten in de grafiek Berichten.
Als u op deze pagina een abonnement selecteert, krijgt u toegang tot de pagina Service Bus-abonnement. Op deze pagina ziet u het aantal actieve berichten, het aantal onbestelbare berichten, en meer. In dit voorbeeld zijn alle berichten ontvangen, waardoor het aantal actieve berichten nul is.
Als u commentaar maakt van de ontvangstcode, verandert het aantal actieve berichten in 16.
Volgende stappen
Raadpleeg de volgende documentatie en voorbeelden:
- Azure Service Bus-clientbibliotheek voor Python
- Voorbeelden.
- De map sync_samples bevat voorbeelden die laten zien hoe u op synchrone wijze met Service Bus kunt werken. In deze quickstart hebt u deze methode gebruikt.
- De map async_samples bevat voorbeelden die laten zien hoe u op asynchrone wijze met Service Bus kunt werken.
- Referentiedocumentatie voor Azure Service Bus