Berichten verzenden naar en berichten ontvangen van Azure Service Bus-wachtrijen (Python)

In dit artikel wordt beschreven hoe u met Python berichten verzendt naar en ontvangt van Azure Service Bus-wachtrijen.

Notitie

Deze quickstart bevat stapsgewijs instructies voor een eenvoudig scenario waarin berichten naar een Service Bus wachtrij worden verzonden en ontvangen. U vindt vooraf gebouwde JavaScript- en TypeScript-voorbeelden voor Azure Service Bus in de Azure SDK voor Python-opslagplaats op GitHub.

Vereisten

Berichten verzenden naar een wachtrij

  1. Voeg de volgende importeerinstructie toe.

    from azure.servicebus import ServiceBusClient, ServiceBusMessage
    
  2. Voeg de volgende constanten toe.

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

    Belangrijk

    • Vervang <NAMESPACE CONNECTION STRING> door de verbindingstekenreeks voor uw Service Bus-naamruimte.
    • Vervang <QUEUE NAME> door de naam van het wachtrij.
  3. 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 queue
        sender.send_messages(message)
        print("Sent a single message")
    

    De afzender is een object dat fungeert als een client voor de wachtrij dat u hebt gemaakt. U maakt en verzendt deze later als een argument voor deze functie.

  4. 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 queue
        sender.send_messages(messages)
        print("Sent a list of 5 messages")
    
  5. 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 queue
        sender.send_messages(batch_message)
        print("Sent a batch of 10 messages")
    
  6. Maak een Service Bus-client en vervolgens een object voor de afzender van de wachtrij 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 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("-----------------------")
    

Berichten van een wachtrij 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 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)

Volledige code

# 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)

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.

Aantal inkomende en uitgaande berichten

Selecteer de wachtrij op de pagina Overzicht om naar de pagina Service Bus-wachtrij te gaan. U kunt ook de binnenkomende en uitgaande berichten op deze pagina zien. U ziet ook andere informatie, zoals de huidige grootte van de wachtrij en aantal actieve berichten.

Details van wachtrij

Volgende stappen

Raadpleeg de volgende documentatie en voorbeelden: