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

Bu öğreticide, bir Service Bus kuyruğundaki iletileri alıp ileti göndermek için Python uygulamalarının nasıl oluşturulacağını öğrenin.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. Etkinleştirebilir, MSDN abone Avantajlarınızı veya kaydolun bir ücretsiz bir hesap.You can activate your MSDN subscriber benefits or sign up for a free account.
  2. İzleyeceğiniz adımlar Service Bus kuyruğuna oluşturmak için Azure portalını kullanın makalesi.Follow steps in the Use Azure portal to create a Service Bus queue article.
    1. Hızlı Okuma genel bakış Service Bus kuyrukları.Read the quick overview of Service Bus queues.

    2. Hizmet veri yolu oluşturma ad alanı.Create a Service Bus namespace.

    3. Alma bağlantı dizesi.Get the connection string.

      Not

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

  3. Yüklemeniz Python veya Python Azure Service Bus paket, bakın Python Yükleme Kılavuzu.Install Python or the Python Azure Service Bus package, see the Python Installation Guide. Service Bus Python SDK'ın tam belgelerine bakın burada.See full documentation of Service Bus Python SDK here.

Bir kuyruk oluşturmaCreate a queue

ServiceBusClient nesnesi kuyrukları ile çalışmanıza olanak sağlar.The ServiceBusClient object enables you to work with queues. Service Bus programlı olarak erişmek istiyorsanız, herhangi bir Python dosyasının en üstüne yakın 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 oluşturur bir ServiceBusClient nesne.The following code creates a ServiceBusClient object. Değiştirin mynamespace, sharedaccesskeyname, ve sharedaccesskey ad alanı, paylaşılan erişim imzası (SAS) anahtar adını ve değeri.Replace mynamespace, sharedaccesskeyname, and sharedaccesskey with your namespace, shared access signature (SAS) key name, and value.

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

SAS anahtar adını ve değerini değerleri bulunabilir [Azure portalında] Azure portal bağlantı bilgilerini veya Visual Studio özellikleri hizmet seçerken bölmesi Sunucu Gezgini'ndeki (önceki bölümde gösterildiği gibi) veri yolu ad alanı.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 de ileti süresi (TTL) Canlı ya da en büyük sıra boyutu gibi varsayılan kuyruk ayarlarını geçersiz kılmak etkinleştirdiğiniz ek seçenekler 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, 5 GB ile 1 dakika TTL değeri için en büyük sıra boyutu 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 Azure Service Bus Python belgeleri.For more information, see Azure Service Bus Python documentation.

Kuyruğa ileti göndermeSend messages to a queue

Uygulama çağrılarınızı, bir Service Bus kuyruğuna bir ileti göndermek için send metodunda ServiceBusClient nesne.To send a message to a Service Bus queue, your application calls the send method on the ServiceBusClient object.

Aşağıdaki örnekte adlı kuyruk için bir test iletisi göndermek nasıl gösterir taskqueue kullanarak send_queue_message: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 Azure Service Bus Python belgeleri.For more information, see Azure Service Bus Python documentation.

Bir kuyruktan ileti almaReceive messages from a queue

İletilerin kullanarak bir sıraya alındığı get_receiver metodunda ServiceBusService nesnesi: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 Azure Service Bus Python belgeleri.For more information, see Azure Service Bus Python documentation.

İleti kuyruktan silinir, ne zaman okunurlar gibi parametre peek_lock ayarlanır False.Messages are deleted from the queue as they are read when the parameter peek_lock is set to False. (Özet) okuyun ve iletiyi kuyruktan parametresini ayarlayarak silmeden kilitleme peek_lock için True.You can read (peek) and lock the message without deleting it from the queue by setting the parameter peek_lock to True.

Okuma ve ileti alma işleminin bir parçası olarak silme davranışı en basit modeldir ve uygulamanın bir arıza olması durumunda bir iletiyi işlememeye izin dayanabilir senaryolar için en iyi şekilde çalışır.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 kullanılıyor olarak işaretleyeceğinden, uygulama yeniden başlatılıp iletileri tekrar kullanmaya başladığında ardından onu çökmenin öncesinde kullanılan iletiyi atlamış 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.

Varsa peek_lock parametrenin ayarlanmış True, alma, atlanan iletilere veremeyen uygulamaları desteklemenin mümkün kılar bir iki aşamalı işlemi haline gelir.If 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 sonra (veya güvenilir bir şekilde işlemek üzere depolar sonra) çağırarak alma işleminin ikinci aşamasını tamamlar Sil metodunda ileti nesne.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. Sil yöntemi iletiyi kullanılıyor olarak işaretler ve kuyruktan kaldırın.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. Alıcı uygulamanın iletiyi işlemek için herhangi bir nedenle silemiyor sonra çağırabilirsiniz kilidini metodunda ileti nesne.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'ın Kuyruktaki iletinin kilidini açmasına ve iletiyi aynı kullanıcı uygulama veya başka bir kullanıcı uygulama tarafından tekrar alınabilir hale neden olur.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 kuyrukta kilitlenen iletiye ilişkin bir zaman aşımı yoktur ve uygulama önce iletiyi işleyemezse (örneğin, uygulama çökerse) Service Bus otomatik olarak iletinin kilidini açmasına ve hale kilit zaman aşımı dolmadan tekrar 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.

Uygulama iletiyi ancak önce çökmesi durumunda, Sil yöntemi çağrılır, ardından yeniden başlatıldığında ileti uygulamaya yeniden teslim edilebilir.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. Buna genellikle denir en az bir kez işlenmesini, 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ı ile yönetebileceğiniz hizmet veri yolu Gezgini.You can manage Service Bus resources with Service Bus Explorer. Hizmet veri yolu Gezgini, bir Service Bus ad alanınıza bağlanın ve mesajlaşma varlıkları kolay bir şekilde yönetmek kullanıcıların sağlar.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şlevleri veya konu, kuyruklar, abonelikler, geçiş hizmetleri, bildirim hub'ları ve olay hub'ları test etme olanağı gibi gelişmiş özellikler 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ına ilişkin temel bilgileri öğrendiniz, daha fazla bilgi için şu makalelere bakın.Now that you have learned the basics of Service Bus queues, see these articles to learn more.