Python ile Service Bus kuyruklarını kullanmaHow to use Service Bus queues with Python

Bu öğreticide, Service Bus kuyruğuna ileti göndermek ve ileti almak için Python uygulamaları oluşturmayı öğreneceksiniz.In this tutorial, you learn how to create Python applications to send messages to and receive messages from a Service Bus queue.

ÖnkoşullarPrerequisites

  1. Azure aboneliği.An Azure subscription. Bu öğreticiyi tamamlamak için bir Azure hesabınızın olması gerekir.To complete this tutorial, you need an Azure account. MSDN abone avantajlarınızı etkinleştirebilir veya ücretsiz bir hesapiçin kaydolabilirsiniz.You can activate your MSDN subscriber benefits or sign up for a free account.
  2. Service Bus kuyruğu oluşturmak için Azure Portal kullanma adımlarını izleyin.Follow steps in the Use Azure portal to create a Service Bus queue article.
    1. Service Bus kuyruklarahızlı genel bakış konusunu okuyun.Read the quick overview of Service Bus queues.

    2. Service Bus ad alanıoluşturun.Create a Service Bus namespace.

    3. Bağlantı dizesinialın.Get the connection string.

      Not

      Bu öğreticide Python kullanarak Service Bus ad alanında bir sıra oluşturacaksınız.You will create a queue in the Service Bus namespace by using Python in this tutorial.

  3. Python veya python Azure Service Bus paketiniyükleme, bkz. Python Yükleme Kılavuzu.Install Python or the Python Azure Service Bus package, see the Python Installation Guide. Service Bus Python SDK 'nıntam belgelerine bakın.See full documentation of Service Bus Python SDK here.

Kuyruk oluşturCreate a queue

Servicebusclient nesnesi kuyruklarla çalışmanıza olanak sağlar.The ServiceBusClient object enables you to work with queues. Service Bus programlı olarak erişmek istediğiniz herhangi bir Python dosyasının üst tarafına yakın bir şekilde aşağıdaki kodu ekleyin:Add the following code near the top of any Python file in which you wish to programmatically access Service Bus:

from azure.servicebus import ServiceBusClient

Aşağıdaki kod bir Servicebusclient nesnesi oluşturur.The following code creates a ServiceBusClient object. ServiceBus ConnectionString ile değiştirin <CONNECTION STRING> .Replace <CONNECTION STRING> with your servicebus connectionstring.

sb_client = ServiceBusClient.from_connection_string('<CONNECTION STRING>')

SAS anahtar adı ve değeri için değerler Azure Portal bağlantı bilgilerinde veya Sunucu Gezgini içinde Service Bus ad alanı seçerken Visual Studio Özellikler bölmesinde bulunabilir (önceki bölümde gösterildiği gibi).The values for the SAS key name and value can be found in the Azure portal connection information, or in the Visual Studio Properties pane when selecting the Service Bus namespace in Server Explorer (as shown in the previous section).

sb_client.create_queue("taskqueue")

create_queue Yöntemi Ayrıca, ileti yaşam süresi (TTL) veya maksimum sıra boyutu gibi varsayılan sıra ayarlarını geçersiz kılmanızı sağlayan ek seçenekleri de destekler.The create_queue method also supports additional options, which enable you to override default queue settings such as message time to live (TTL) or maximum queue size. Aşağıdaki örnek, en büyük sıra boyutunu 5 GB ve TTL değerini 1 dakikaya ayarlar:The following example sets the maximum queue size to 5 GB, and the TTL value to 1 minute:

sb_client.create_queue("taskqueue", max_size_in_megabytes=5120,
                       default_message_time_to_live=datetime.timedelta(minutes=1))

Daha fazla bilgi için bkz. Python belgelerini Azure Service Bus.For more information, see Azure Service Bus Python documentation.

Kuyruğa ileti göndermeSend messages to a queue

Service Bus kuyruğuna ileti göndermek için, uygulamanız send ServiceBusClient nesne üzerindeki yöntemini çağırır.To send a message to a Service Bus queue, your application calls the send method on the ServiceBusClient object.

Aşağıdaki örnek, kullanılarak taskqueue send_queue_messageadlı sıraya bir test iletisinin nasıl gönderileceğini göstermektedir:The following example demonstrates how to send a test message to the queue named taskqueue using send_queue_message:

from azure.servicebus import QueueClient, Message

# Create the QueueClient
queue_client = QueueClient.from_connection_string(
    "<CONNECTION STRING>", "<QUEUE NAME>")

# Send a test message to the queue
msg = Message(b'Test Message')
queue_client.send(msg)

Service Bus kuyrukları, Standart katmanda maksimum 256 KB ve Premium katmanda maksimum 1 MB ileti boyutunu destekler.Service Bus queues support a maximum message size of 256 KB in the Standard tier and 1 MB in the Premium tier. Standart ve özel uygulama özelliklerini içeren üst bilginin maksimum dosya boyutu 64 KB olabilir.The header, which includes the standard and custom application properties, can have a maximum size of 64 KB. Kuyrukta tutulan ileti sayısına ilişkin bir sınır yoktur ancak kuyruk tarafından tutulan iletilerin toplam boyutu için uç sınır vardır.There is no limit on the number of messages held in a queue but there is a cap on the total size of the messages held by a queue. Bu kuyruk boyutu, üst sınır 5 GB olacak şekilde oluşturulma zamanında belirlenir.This queue size is defined at creation time, with an upper limit of 5 GB. Kotalar hakkında daha fazla bilgi için bkz. Service Bus kotaları.For more information about quotas, see Service Bus quotas.

Daha fazla bilgi için bkz. Python belgelerini Azure Service Bus.For more information, see Azure Service Bus Python documentation.

Kuyruktan ileti almaReceive messages from a queue

İleti, get_receiver ServiceBusService nesne üzerindeki yöntemi kullanılarak bir kuyruktan alınır:Messages are received from a queue using the get_receiver method on the ServiceBusService object:

from azure.servicebus import QueueClient, Message

# Create the QueueClient
queue_client = QueueClient.from_connection_string(
    "<CONNECTION STRING>", "<QUEUE NAME>")

# Receive the message from the queue
with queue_client.get_receiver() as queue_receiver:
    messages = queue_receiver.fetch_next(timeout=3)
    for message in messages:
        print(message)
        message.complete()

Daha fazla bilgi için bkz. Python belgelerini Azure Service Bus.For more information, see Azure Service Bus Python documentation.

Mesajlar, parametre peek_lock falseolarak ayarlandığında okunduklarında silinir.Messages are deleted from the queue as they are read when the parameter peek_lock is set to False. Parametreyi peek_lock , doğruolarak ayarlayarak iletiyi okuyabilir (Peek) ve kilitle 'yi kuyruktan silebilirsiniz.You can read (peek) and lock the message without deleting it from the queue by setting the parameter peek_lock to True.

İletiyi alma işleminin bir parçası olarak okuma ve silme davranışı en basit modeldir ve bir uygulamanın hata durumunda bir iletiyi işlememesinin kabul edebildiği senaryolar için en iyi sonuç verir.The behavior of reading and deleting the message as part of the receive operation is the simplest model, and works best for scenarios in which an application can tolerate not processing a message in the event of a failure. Bu durumu daha iyi anlamak için müşterinin bir alma isteği bildirdiğini ve bu isteğin işlenmeden çöktüğünü varsayın.To understand this, consider a scenario in which the consumer issues the receive request and then crashes before processing it. Service Bus iletiyi tüketildiği gibi işaretlediği için, uygulama yeniden başlatıldığında ve iletileri yeniden kullanmaya başladığında, kilitlenmeden önce tüketilen iletiyi kaçırmış olur.Because Service Bus will have marked the message as being consumed, then when the application restarts and begins consuming messages again, it will have missed the message that was consumed prior to the crash.

Parametresi true olarak ayarlanırsa, Receive iki aşamalı bir işlem haline gelir ve bu, eksik iletilere izin verilmeyen uygulamaları desteklemeyi olanaklı kılar. peek_lockIf the peek_lock parameter is set to True, the receive becomes a two stage operation, which makes it possible to support applications that cannot tolerate missing messages. Service Bus bir istek aldığında bir sonraki kullanılacak iletiyi bulur, diğer tüketicilerin bu iletiyi almasını engellemek için kilitler ve ardından uygulamaya döndürür.When Service Bus receives a request, it finds the next message to be consumed, locks it to prevent other consumers receiving it, and then returns it to the application. Uygulama iletiyi işlemeyi tamamladıktan (veya gelecekteki işlemler için güvenilir bir şekilde depolar), ileti nesnesindeki Delete yöntemini çağırarak alma işleminin ikinci aşamasını tamamlar.After the application finishes processing the message (or stores it reliably for future processing), it completes the second stage of the receive process by calling the delete method on the Message object. Delete yöntemi iletiyi tüketildiği gibi işaretleyecek ve kuyruktan kaldıracak.The delete method will mark the message as being consumed and remove it from the queue.

msg.delete()

Uygulama çökmelerini ve okunmayan iletileri gidermeHow to handle application crashes and unreadable messages

Service Bus, uygulamanızda gerçekleşen hataları veya ileti işlenirken oluşan zorlukları rahat bir şekilde ortadan kaldırmanıza yardımcı olmak için işlevsellik sağlar.Service Bus provides functionality to help you gracefully recover from errors in your application or difficulties processing a message. Bir alıcı uygulaması iletiyi bir nedenden dolayı işleyebilirse, ileti nesnesinde unlock metodunu çağırabilir.If a receiver application is unable to process the message for some reason, then it can call the unlock method on the Message object. Bu, Service Bus kuyruktaki iletinin kilidini açmasına ve aynı uygulama ya da başka bir uygulama tarafından yeniden alınabilir olmasını sağlar.This will cause Service Bus to unlock the message within the queue and make it available to be received again, either by the same consuming application or by another consuming application.

Ayrıca, kuyruk içinde kilitlenen bir iletiyle ilişkili bir zaman aşımı vardır ve uygulamanın kilit zaman aşımı dolmadan önce iletiyi işleyemezse (örneğin, uygulama çökerse), Service Bus otomatik olarak iletinin kilidini açar ve bunu yapar yeniden alınmak üzere kullanılabilir.There is also a timeout associated with a message locked within the queue, and if the application fails to process the message before the lock timeout expires (for example, if the application crashes), then Service Bus will unlock the message automatically and make it available to be received again.

İleti işlendikten sonra, ancak Delete yöntemi çağrılmadan önce uygulamanın çöktüğü durumda, yeniden başlatıldığında ileti uygulamaya yeniden gönderilir.In the event that the application crashes after processing the message but before the delete method is called, then the message will be redelivered to the application when it restarts. Bu genellikle en az bir kez işlemeolarak adlandırılır, diğer bir deyişle her ileti en az bir kez işlenir ancak belirli durumlarda aynı ileti yeniden teslim edilebilir.This is often called at least once processing, that is, each message will be processed at least once but in certain situations the same message may be redelivered. Senaryo yinelenen işlemeyi kabul etmiyorsa yinelenen ileti teslimine izin vermek için uygulama geliştiricilerin uygulamaya ilave bir mantık eklemesi gerekir.If the scenario cannot tolerate duplicate processing, then application developers should add additional logic to their application to handle duplicate message delivery. Bu işlem, genellikle iletinin teslimat denemelerinde korunan MessageId özelliği kullanılarak gerçekleştirilir.This is often achieved using the MessageId property of the message, which will remain constant across delivery attempts.

Not

Service Bus kaynaklarını Service Bus Explorerile yönetebilirsiniz.You can manage Service Bus resources with Service Bus Explorer. Service Bus gezgin, kullanıcıların bir Service Bus ad alanına bağlanmasına ve mesajlaşma varlıklarını kolay bir şekilde yönetmesine olanak tanır.The Service Bus Explorer allows users to connect to a Service Bus namespace and administer messaging entities in an easy manner. Araç içeri/dışarı aktarma işlevselliği gibi gelişmiş özellikler ya da konu, kuyruk, abonelik, geçiş Hizmetleri, Bildirim Hub 'ları ve Olay Hub 'larını test etme yeteneği sağlar.The tool provides advanced features like import/export functionality or the ability to test topic, queues, subscriptions, relay services, notification hubs and events hubs.

Sonraki adımlarNext steps

Service Bus kuyrukların temellerini öğrendiğinize göre, daha fazla bilgi edinmek için şu makalelere bakın.Now that you have learned the basics of Service Bus queues, see these articles to learn more.