posílání zpráv a příjem zpráv z front Service Bus Azure (Python)

v tomto článku se dozvíte, jak pomocí pythonu odesílat zprávy do front Azure Service Bus a přijímat z nich zprávy.

Poznámka

v tomto rychlém startu najdete podrobné pokyny pro jednoduchý scénář posílání zpráv do fronty Service Bus a jejich příjem. předem připravené ukázky jazyka JavaScript a TypeScript pro azure Service Bus najdete v části azure SDK for Python úložiště v GitHub.

Požadavky

Zasílání zpráv do fronty

  1. Přidejte následující příkaz import.

    from azure.servicebus import ServiceBusClient, ServiceBusMessage
    
  2. Přidejte následující konstanty.

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

    Důležité

    • nahraďte <NAMESPACE CONNECTION STRING> připojovacím řetězcem pro váš Service Bus obor názvů.
    • Nahraďte <QUEUE NAME> názvem fronty.
  3. Přidejte metodu pro odeslání jedné zprávy.

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

    Odesilatel je objekt, který funguje jako klient pro vytvořenou frontu. Později ho vytvoříte a odešlete jako argument této funkce.

  4. Přidejte metodu pro odeslání seznamu zpráv.

    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. Přidejte metodu pro odeslání dávky zpráv.

    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. vytvořte klienta Service Bus a potom objekt odesílatele fronty pro odesílání zpráv.

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

Přijímání zpráv z fronty

Po příkazu Print přidejte následující kód. Tento kód průběžně přijímá nové zprávy, dokud neobdrží žádné nové zprávy po dobu 5 ( max_wait_time ) sekund.

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)

Úplný kód

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

Spuštění aplikace

Při spuštění aplikace by se měl zobrazit následující výstup:

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

v Azure Portal přejděte do svého oboru názvů Service Bus. Na stránce Přehled ověřte, že počet příchozích a odchozích zpráv je 16. Pokud se počty nezobrazuje, aktualizujte stránku po několik minut.

Počet příchozích a odchozích zpráv

na stránce s přehledem vyberte frontu a přejděte na stránku Service Bus queue . Na této stránce můžete také zobrazit počet příchozích a odchozích zpráv. Zobrazí se také další informace, jako je aktuální velikost fronty a Počet aktivních zpráv.

Podrobnosti fronty

Další kroky

Podívejte se na následující dokumentaci a ukázky: