Skicka meddelanden till ett Azure Service Bus-ämne och ta emot meddelanden från prenumerationer på ämnet (Python)
Den här artikeln visar hur du använder Python för att skicka meddelanden Service Bus ett ämne och ta emot meddelanden från en prenumeration till ämnet.
Anteckning
Den här snabbstarten innehåller stegvisa instruktioner för ett enkelt scenario där du skickar en batch med meddelanden till ett Service Bus-ämne och tar emot dessa meddelanden från en prenumeration på ämnet. Du hittar förbyggda JavaScript- och TypeScript-exempel för Azure Service Bus på lagringsplatsen Azure SDK för Python på GitHub.
Förutsättningar
- En Azure-prenumeration. Du kan aktivera dina Visual Studio- eller MSDN-prenumerantförmåner eller registrera dig för ett kostnadsfritt konto.
- Följ stegen i Snabbstart: Använd Azure Portal för att skapa Service Bus ettämne och prenumerationer på ämnet . Anteckna anslutningssträngen, ämnesnamnet och ett prenumerationsnamn. Du använder bara en prenumeration för den här snabbstarten.
- Python 3.5 eller senare, med paketet [Azure Python SDK][Azure Python package] installerat. Mer information finns i installationsguiden för Python.
Skicka meddelanden till ett ämne
Lägg till följande importutdrag.
from azure.servicebus import ServiceBusClient, ServiceBusMessageLägg till följande konstanter.
CONNECTION_STR = "<NAMESPACE CONNECTION STRING>" TOPIC_NAME = "<TOPIC NAME>" SUBSCRIPTION_NAME = "<SUBSCRIPTION NAME>"Viktigt
- Ersätt
<NAMESPACE CONNECTION STRING>med anslutningssträngen för namnområdet. - Ersätt
<TOPIC NAME>med namnet på ämnet. - Ersätt
<SUBSCRIPTION NAME>med namnet på prenumerationen på ämnet.
- Ersätt
Lägg till en metod för att skicka ett enda meddelande.
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")Avsändaren är ett objekt som fungerar som en klient för det ämne som du har skapat. Du skapar den senare och skickar den som ett argument till den här funktionen.
Lägg till en metod för att skicka en lista med meddelanden.
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")Lägg till en metod för att skicka en batch med meddelanden.
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")Skapa en Service Bus klient och sedan ett ämnesavsändarobjekt för att skicka meddelanden.
# 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("-----------------------")
Ta emot meddelanden från en prenumeration
Lägg till följande kod efter print-instruktionen. Den här koden tar kontinuerligt emot nya meddelanden tills den inte tar emot några nya meddelanden under 5 ( max_wait_time ) sekunder.
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)
Fullständig kod
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)
Kör appen
När du kör programmet bör du se följande utdata:
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
I Azure Portal navigerar du till Service Bus namnområdet. På sidan Översikt kontrollerar du att antalet inkommande och utgående meddelanden är 16. Om du inte ser antalet uppdaterar du sidan efter att ha väntat i några minuter.
Välj ämnet i det nedre fönstret för att Service Bus sidan Ämne för ditt ämne. På den här sidan bör du se tre inkommande och tre utgående meddelanden i diagrammet Meddelanden.
Om du väljer en prenumeration på den här sidan kommer du Service Bus prenumerationssidan. Du kan se antal aktiva meddelanden, antal meddelanden utan bokstav med mera på den här sidan. I det här exemplet har alla meddelanden tagits emot, så antalet aktiva meddelanden är noll.
Om du kommenterar bort mottagningskoden visas antalet aktiva meddelanden som 16.
Nästa steg
Se följande dokumentation och exempel:
- Azure Service Bus klientbibliotek för Python
- Exempel.
- Mappen sync_samples innehåller exempel som visar hur du interagerar med Service Bus på ett synkront sätt. I den här snabbstarten använde du den här metoden.
- Mappen async_samples innehåller exempel som visar hur du interagerar med Service Bus på ett asynkront sätt.
- referensdokumentation för azure-servicebus