Azure Service Bus kuyruklarından (Python) ileti gönderme ve iletileri alma

bu makalede, Python kullanarak Azure Service Bus kuyruklarından ileti gönderme ve alma işlemlerinin nasıl yapılacağı gösterilir.

Not

bu hızlı başlangıç, Service Bus kuyruğuna ileti gönderme ve bunları alma basit senaryosu için adım adım yönergeler sağlar. azure Service Bus için önceden oluşturulmuş JavaScript ve TypeScript örneklerini GitHub üzerinde Python deposu için azure SDK'da bulabilirsiniz.

Önkoşullar

Kuyruğa ileti gönderme

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

    from azure.servicebus import ServiceBusClient, ServiceBusMessage
    
  2. Aşağıdaki sabitleri ekleyin.

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

    Önemli

    • <NAMESPACE CONNECTION STRING>Service Bus ad alanınız için bağlantı dizesiyle değiştirin.
    • <QUEUE NAME>Kuyruğun adıyla değiştirin.
  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 queue
        sender.send_messages(message)
        print("Sent a single message")
    

    Gönderen, oluşturduğunuz sıra için istemci görevi gören bir nesnedir. Daha sonra oluşturacaksınız ve bu işleve bağımsız değişken olarak gönderebilirsiniz.

  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 queue
        sender.send_messages(messages)
        print("Sent a list of 5 messages")
    
  5. İleti toplu işi 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 queue
        sender.send_messages(batch_message)
        print("Sent a batch of 10 messages")
    
  6. ileti göndermek için bir Service Bus istemcisi ve sonra bir kuyruk 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 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("-----------------------")
    

Kuyruktan ileti alma

Print deyimden sonra aşağıdaki kodu ekleyin. Bu kod, 5 () saniye boyunca yeni iletiler almamaya kadar yeni iletileri sürekli alır max_wait_time .

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)

Tam kod

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

Uygulamayı çalıştırma

Uygulamayı çalıştırdığınızda aşağıdaki çıktıyı görmeniz 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

Azure portal, Service Bus ad alanına gidin. Genel bakış sayfasında gelen ve giden ileti sayılarını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ı

Service Bus kuyruğu sayfasına gitmek için bu genel bakış sayfasında kuyruğu seçin. Bu sayfada gelen ve giden ileti sayısını da görebilirsiniz. Ayrıca, sıranın geçerli boyutu ve etkin ileti sayısı gibi diğer bilgileri de görürsünüz.

Kuyruk ayrıntıları

Sonraki adımlar

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