Azure Service Bus konu başlığına ileti gönderme ve aboneliklerden konuya ileti alma (Python)
Bu makalede Python kullanarak bir konu başlığına Service Bus ve bir abonelikten konuya ileti alma hakkında bilgi edinebilirsiniz.
Not
Bu hızlı başlangıç, bir konu başlığına toplu ileti gönderme ve bu iletileri konu aboneliğinden Service Bus basit bir senaryo için adım adım yönergeler sağlar. Azure Service Bus için önceden derlediniz JavaScript ve TypeScript örneklerini GitHub.
Önkoşullar
- Azure aboneliği. Aboneliğinizi veya MSDN Visual Studio avantajlarını etkinleştirebilirsiniz veya ücretsiz bir hesap için kaydolabilirsiniz.
- Hızlı Başlangıç: Konusuyla ilgili Azure portal ve abonelikler Service Bus için hızlı başlangıç adımlarını izleyin. Bağlantı dizesini, konu adını ve abonelik adını not edin. Bu hızlı başlangıç için yalnızca bir abonelik kullanasınız.
- [Azure Python SDK][Azure Python paketi] paketinin yüklü olduğu Python 3.5 veya üst sürümü. Daha fazla bilgi için bkz. Python Yükleme Kılavuzu.
Konu başlığına ileti gönderme
Aşağıdaki içeri aktarma deyimini ekleyin.
from azure.servicebus import ServiceBusClient, ServiceBusMessageAşağıdaki sabitleri ekleyin.
CONNECTION_STR = "<NAMESPACE CONNECTION STRING>" TOPIC_NAME = "<TOPIC NAME>" SUBSCRIPTION_NAME = "<SUBSCRIPTION NAME>"Önemli
- yerine
<NAMESPACE CONNECTION STRING>ad alanınız için bağlantı dizesini ekleyin. - yerine
<TOPIC NAME>konunun adını yazın. - yerine
<SUBSCRIPTION NAME>konu aboneliğinin adını yazın.
- yerine
Tek bir ileti göndermek için bir yöntem ekleyin.
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")Gönderen, oluşturduğunuz konu başlığı için istemci olarak hareket eder. Bunu daha sonra oluşturacağız ve bu işleve bağımsız değişken olarak göndereceksiniz.
İleti listesi göndermek için bir yöntem ekleyin.
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")Toplu ileti göndermek için bir yöntem ekleyin.
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")Bir Service Bus ve ardından ileti göndermek için bir konu gönderen nesnesi oluşturun.
# 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("-----------------------")
Abonelikten ileti alma
Print deyiminden sonra aşağıdaki kodu ekleyin. Bu kod, 5 ( ) saniye boyunca yeni ileti almayana kadar sürekli yeni max_wait_time iletiler alır.
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)
Tam kod
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)
Uygulamayı çalıştırma
Uygulamayı çalıştıracak olurken aşağıdaki çıkışı görüyor gerekir:
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
Aşağıdaki Azure portal ad alanınıza Service Bus gidin. Genel Bakış sayfasında, gelen ve giden ileti sayılarını 16 olduğunu doğrulayın. Sayıları görmüyorsanız, birkaç dakika bekledikten sonra sayfayı yenileyin.
Konu başlığınıza uygun Konu başlığı sayfasını görmek Service Bus bölmede konuyu seçin. Bu sayfada İletiler grafiğinde üç gelen ve üç giden ileti görüyorsanız.
Bu sayfada, bir abonelik seçersiniz, Abonelik sayfasında Service Bus edinebilirsiniz. Bu sayfada etkin ileti sayısını, ileti sayısını ve daha fazlasını görebilirsiniz. Bu örnekte tüm iletiler alınmıştır, dolayısıyla etkin ileti sayısı sıfırdır.
Alma kodunu açıklamaya alırsanız etkin ileti sayısını 16 olarak alırsınız.
Sonraki adımlar
Aşağıdaki belgelere ve örneklere bakın:
- Python Service Bus azure istemci kitaplığı
- Örnekler.
- Sync_samples klasöründe, dosyalarla zaman uyumlu bir şekilde etkileşim Service Bus örnekler bulunur. Bu hızlı başlangıçta bu yöntemi kullandın.
- Async_samples klasöründe, dosyalarla zaman uyumsuz bir şekilde etkileşim Service Bus örnekler bulunur.
- azure-servicebus başvuru belgeleri