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

Konu başlığına ileti gönderme

  1. Aşağıdaki içeri aktarma deyimini ekleyin.

    from azure.servicebus import ServiceBusClient, ServiceBusMessage
    
  2. Aş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.
  3. 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.

  4. İ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")
    
  5. 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")
    
  6. 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.

Gelen ve giden ileti sayısı

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.

Gelen ve giden iletiler

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.

Etkin ileti sayısı

Alma kodunu açıklamaya alırsanız etkin ileti sayısını 16 olarak alırsınız.

Etkin ileti sayısı - alma yok

Sonraki adımlar

Aşağıdaki belgelere ve örneklere bakın: