odeslání zprávy do tématu Azure Service Bus a příjem zpráv z předplatných do tématu (Python)

v tomto článku se dozvíte, jak pomocí pythonu odesílat zprávy Service Bus tématu a přijímat zprávy z odběru tématu.

Poznámka

v tomto rychlém startu najdete podrobné pokyny pro jednoduchý scénář odesílání dávek zpráv do Service Bus tématu a příjem těchto zpráv z předplatného tématu. 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

Odeslání zprávy do tématu

  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>"
    TOPIC_NAME = "<TOPIC NAME>"
    SUBSCRIPTION_NAME = "<SUBSCRIPTION NAME>"
    

    Důležité

    • Nahraďte <NAMESPACE CONNECTION STRING> připojovacím řetězcem pro váš obor názvů.
    • Nahraďte <TOPIC NAME> názvem tématu.
    • Nahraďte <SUBSCRIPTION NAME> názvem předplatného tématu.
  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 topic
        sender.send_messages(message)
        print("Sent a single message")
    

    Odesilatel je objekt, který funguje jako klient pro téma, které jste vytvořili. 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 topic
        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 topic
        sender.send_messages(batch_message)
        print("Sent a batch of 10 messages")
    
  6. vytvořte klienta Service Bus a pak objekt odesílatele tématu, který odešle zprávy.

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

Přijímání zpráv z předplatného

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

Úplný kód

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)

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

vyberte téma v dolním podokně, kde se zobrazí stránka Service Bus téma pro vaše téma. Na této stránce byste měli vidět tři příchozí a tři odchozí zprávy v grafu zprávy .

Příchozí a odchozí zprávy

po výběru předplatného na této stránce se dostanete na stránku Service Bus předplatné . Na této stránce můžete zobrazit počet aktivních zpráv, počet nedoručených zpráv a další. V tomto příkladu byly přijaty všechny zprávy, takže počet aktivních zpráv je nula.

Počet aktivních zpráv

Pokud Odkomentujete kód pro příjem, zobrazí se počet aktivních zpráv jako 16.

Počet aktivních zpráv – bez příjmu

Další kroky

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