Skicka meddelanden till och ta emot meddelanden från Azure Service Bus köer (Python)

Den här artikeln visar hur du använder Python för att skicka meddelanden till och ta emot meddelanden från Azure Service Bus köer.

Anteckning

Den här snabbstarten innehåller stegvisa instruktioner för ett enkelt scenario där meddelanden skickas till en Service Bus och tar emot dem. Du hittar färdiga JavaScript- och TypeScript-exempel för Azure Service Bus på lagringsplatsen Azure SDK för Python på GitHub.

Förutsättningar

Skicka meddelanden till en kö

  1. Lägg till följande importutdrag.

    from azure.servicebus import ServiceBusClient, ServiceBusMessage
    
  2. Lägg till följande konstanter.

    CONNECTION_STR = "<NAMESPACE CONNECTION STRING>"
    QUEUE_NAME = "<QUEUE NAME>"
    

    Viktigt

    • Ersätt <NAMESPACE CONNECTION STRING> med anslutningssträngen för Service Bus namnområdet.
    • Ersätt <QUEUE NAME> med namnet på kön.
  3. 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 queue
        sender.send_messages(message)
        print("Sent a single message")
    

    Avsändaren är ett objekt som fungerar som en klient för den kö som du skapade. Du skapar den senare och skickar den som ett argument till den här funktionen.

  4. 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 queue
        sender.send_messages(messages)
        print("Sent a list of 5 messages")
    
  5. 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 queue
        sender.send_messages(batch_message)
        print("Sent a batch of 10 messages")
    
  6. Skapa en Service Bus klient och sedan ett objekt för köavsändar 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 Queue Sender object to send messages to the queue
        sender = servicebus_client.get_queue_sender(queue_name=QUEUE_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 kö

Lägg till följande kod efter utskriftsuttrycket. 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 Queue Receiver object for the queue
    receiver = servicebus_client.get_queue_receiver(queue_name=QUEUE_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 queue
            receiver.complete_message(msg)

Fullständig kod

# import os
from azure.servicebus import ServiceBusClient, ServiceBusMessage

CONNECTION_STR = "<NAMESPACE CONNECTION STRING>"
QUEUE_NAME = "<QUEUE 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_queue_sender(queue_name=QUEUE_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_queue_receiver(queue_name=QUEUE_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.

Antal inkommande och utgående meddelanden

Välj kön på den här översiktssidan för att gå till sidan Service Bus Kö. Du kan också se antalet inkommande och utgående meddelanden på den här sidan. Du ser även annan information, till exempel den aktuella storleken på kön och antalet aktiva meddelanden.

Köinformation

Nästa steg

Se följande dokumentation och exempel: