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
- Předplatné Azure. můžete aktivovat výhody pro předplatitele Visual Studio nebo MSDN nebo si zaregistrovat bezplatný účet.
- postupujte podle kroků v rychlém startu: pomocí Azure Portal vytvořte Service Bus téma a odběry tématu. Poznamenejte si připojovací řetězec, název tématu a název předplatného. Pro tento rychlý Start budete používat jenom jedno předplatné.
- Python 3,5 nebo vyšší, s nainstalovaným balíčkem [Azure Python SDK] [balíček Azure Python]. Další informace najdete v příručce pro instalaci Pythonu.
Odeslání zprávy do tématu
Přidejte následující příkaz import.
from azure.servicebus import ServiceBusClient, ServiceBusMessagePř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.
- Nahraďte
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.
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")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")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.
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 .
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.
Pokud Odkomentujete kód pro příjem, zobrazí se počet aktivních zpráv jako 16.
Další kroky
Podívejte se na následující dokumentaci a ukázky:
- klientská knihovna pro Azure Service Bus pro Python
- Ukázky.
- složka sync_samples obsahuje ukázky, které ukazují, jak pracovat s Service Bus synchronním způsobem. V tomto rychlém startu jste použili tuto metodu.
- složka async_samples obsahuje ukázky, které ukazují, jak pracovat s Service Bus asynchronním způsobem.
- Referenční dokumentace k Azure-ServiceBus