Python'dan Azure Kuyruk Depolama kullanma

Genel Bakış

Bu makalede, Azure Kuyruk Depolama hizmetinin kullanımıyla ilgili yaygın senaryolar açıklanmıştır. Ele alınan senaryolar kuyruk iletilerini ekleme, göz atma, alma ve silmeyi içerir. Kuyruk oluşturma ve silme kodu da ele almaktadır.

Bu makaledeki örnekler Python'da yazılmıştır ve Python için Azure Kuyruk Depolama kitaplığını kullanır. Kuyruklar hakkında daha fazla bilgi için Sonraki adımlar bölümüne bakın.

Kuyruk depolama nedir?

Azure Kuyruk depolama, HTTP veya HTTPS kullanan kimlik doğrulaması yapılmış çağrılar aracılığıyla dünyanın her yerinden erişilebilen çok sayıda iletinin depolanması için bir hizmettir. Tek bir kuyruk iletisinin boyutu 64 KB’ye kadar olabilir ve bir kuyrukta, depolama hesabının toplam kapasite sınırına kadar milyonlarca ileti bulunabilir. Kuyruk depolama genellikle zaman uyumsuz olarak işlenecek iş biriktirme listesi oluşturmak için kullanılır.

Kuyruk hizmeti kavramlar

Azure Kuyruk hizmeti aşağıdaki bileşenleri içerir:

Azure Kuyruk hizmeti bileşenleri

  • Depolama hesabı: Tüm Azure depolama erişimi bir depolama hesabı üzerinden yapılır. Depolama hesapları hakkında daha fazla bilgi için bkz. depolama hesabına genel bakış.

  • Kuyruk: Kuyrukta bir dizi ileti vardır. Tüm iletiler bir kuyrukta olmalıdır. Kuyruk adının tamamen küçük harfli olması gerektiğini unutmayın. Kuyrukların adlandırılması hakkında daha fazla bilgi için bkz. Kuyrukları ve Meta Verileri Adlandırma.

  • İleti: İleti, biçimi ne olursa olsun en çok 64 KB büyüklüktedir. Bir iletinin kuyrukta kalabileceği en uzun süre 7 gündür. Sürüm 2017-07-29 veya üzeri için, en fazla yaşam süresi herhangi bir pozitif sayı veya iletinin süresinin dolmadığını belirten-1 olabilir. Bu parametre atlanırsa, varsayılan yaşam süresi yedi gündür.

  • URL biçimi: Kuyruklar şu URL biçimi kullanılarak adreslenebilir: http:// <storage account> . Queue.Core.Windows.net/<queue>

    Aşağıdaki URL diyagramdaki bir kuyruğun adresini belirtir:

    http://myaccount.queue.core.windows.net/incoming-orders

Azure depolama hesabı oluşturma

İlk Azure depolama hesabınızı oluşturmanın en kolay yolu Azure Portalı’nı kullanmaktır. Daha fazla bilgi için bkz. Depolama hesabı oluşturma.

Azure PowerShell, Azure CLI veya .NET için Azure Depolama Kaynak Sağlayıcısı’nı da kullanarak Azure depolama hesabı oluşturabilirsiniz.

Şu anda Azure 'da bir depolama hesabı oluşturmayı tercih ediyorsanız, kodunuzu yerel bir ortamda çalıştırmak ve test etmek için Azurite depolama öykünücüsünü da kullanabilirsiniz. Daha fazla bilgi için bkz. Yerel Azure depolama geliştirmesi Için Azurite öykünücüsünü kullanma.

Python için Azure Depolama SDK'sı indirme ve yükleme

Python için Azure Depolama SDK'sı Python v2.7, v3.3 veya sonraki bir sürümü gerektirir.

PyPI aracılığıyla yükleme

Python Paket Dizini (PyPI) aracılığıyla yüklemek için şunları yazın:

pip install azure-storage-queue

Not

Python v0.36 veya önceki sürümler için Azure Depolama SDK'sından yükseltıyorsanız, en son paketi yüklemeden önce kullanarak eski pip uninstall azure-storage SDK'yı kaldırın.

Alternatif yükleme yöntemleri için bkz. Python için Azure SDK.

Azure portalından kimlik bilgilerinizi kopyalama

örnek uygulama Azure Depolama istek yaptığında yetkilendirilmiş olması gerekir. Bir isteği yetkilendirmek için, depolama hesabı kimlik bilgilerinizi uygulamaya bağlantı dizesi olarak ekleyin. Depolama hesabı kimlik bilgilerinizi görüntülemek için aşağıdaki adımları izleyin:

  1. Azure Portal’ında oturum açın.

  2. Depolama hesabınızı bulun.

  3. Depolama hesabı menü bölmesinde, güvenlik + ağ altında, erişim anahtarları' nı seçin. Burada, her anahtar için hesap erişim anahtarlarını ve tüm bağlantı dizesini görüntüleyebilirsiniz.

    Erişim anahtarı ayarlarının Azure portal nerede olduğunu gösteren ekran görüntüsü

  4. Erişim tuşları bölmesinde, anahtarları göster' i seçin.

  5. KEY1 bölümünde bağlantı dizesi değerini bulun. Bağlantı dizesini kopyalamak için Panoya Kopyala simgesini seçin. Bir sonraki bölümde bağlantı dizesi değerini bir ortam değişkenine eklersiniz.

    Azure portalından bağlantı dizesinin kopyalanmasını gösteren ekran görüntüsü

Depolama bağlantı dizelerinizi yapılandırma

Bağlantı dizesini kopyaladıktan sonra, uygulamayı çalıştıran yerel makinede yeni bir ortam değişkenine yazın. Ortam değişkenini ayarlamak için bir konsol penceresi açın ve işletim sisteminizin yönergelerini izleyin. <yourconnectionstring>Gerçek bağlantı dizeniz ile değiştirin.

Windows

setx AZURE_STORAGE_CONNECTION_STRING "<yourconnectionstring>"

ortam değişkenini Windows ekledikten sonra, komut penceresinin yeni bir örneğini başlatmanız gerekir.

Linux

export AZURE_STORAGE_CONNECTION_STRING="<yourconnectionstring>"

macOS

export AZURE_STORAGE_CONNECTION_STRING="<yourconnectionstring>"

Programları yeniden Başlat

Ortam değişkenini ekledikten sonra, ortam değişkenini okumak için gereken tüm çalışan programları yeniden başlatın. Örneğin, devam etmeden önce geliştirme ortamınızı veya düzenleyiciyi yeniden başlatın.

Kuyruk Depolama'ya erişmek için uygulama yapılandırma

nesnesi QueueClient bir kuyrukla çalışmana olanak sağlar. Aşağıdaki kodu, bir Azure kuyruğuna program aracılığıyla erişmek istediğiniz herhangi bir Python dosyasının en üstüne ekleyin:

from azure.storage.queue import (
        QueueClient,
        BinaryBase64EncodePolicy,
        BinaryBase64DecodePolicy
)

import os, uuid

osPaket, bir ortam değişkenini almak için destek sağlar. uuidPaket, bir kuyruk adı için benzersiz bir tanımlayıcı oluşturma desteği sağlar.

Bir kuyruk oluşturma

Bağlantı dizesi, AZURE_STORAGE_CONNECTION_STRING daha önce ayarlanan ortam değişkeni üzerinden alınır.

Aşağıdaki kod, QueueClient depolama bağlantı dizesi kullanarak bir nesnesi oluşturur.

# Retrieve the connection string from an environment
# variable named AZURE_STORAGE_CONNECTION_STRING
connect_str = os.getenv("AZURE_STORAGE_CONNECTION_STRING")

# Create a unique name for the queue
q_name = "queue-" + str(uuid.uuid4())

# Instantiate a QueueClient object which will
# be used to create and manipulate the queue
print("Creating queue: " + q_name)
queue_client = QueueClient.from_connection_string(connect_str, q_name)

# Create the queue
queue_client.create_queue()

Azure kuyruk iletileri metin olarak depolanır. İkili verileri depolamak istiyorsanız, kuyruğa bir ileti koymadan önce Base64 kodlaması ve kod çözme işlevleri ayarlayın.

İstemci nesnesini oluştururken Base64 kodlamayı ve kod çözme işlevlerini yapılandırın.

# Setup Base64 encoding and decoding functions
base64_queue_client = QueueClient.from_connection_string(
                            conn_str=connect_str, queue_name=q_name,
                            message_encode_policy = BinaryBase64EncodePolicy(),
                            message_decode_policy = BinaryBase64DecodePolicy()
                        )

Kuyruğa bir ileti yerleştirme

Bir kuyruğa ileti eklemek için send_message yöntemini kullanın.

message = u"Hello World"
print("Adding message: " + message)
queue_client.send_message(message)

İletilere göz atın

Yöntemini çağırarak iletileri kuyruktan kaldırmadan göz atmayı sağlayabilirsiniz peek_messages . Varsayılan olarak, bu yöntem tek bir iletiye göz atar.

# Peek at the first message
messages = queue_client.peek_messages()

for peeked_message in messages:
    print("Peeked message: " + peeked_message.content)

Kuyruğa alınan iletinin içeriğini değiştirme

Kuyrukta yer alan bir iletinin içeriğini değiştirebilirsiniz. İleti bir görevi temsil ediyorsa, görevin durumunu güncelleştirmek için bu özelliği kullanabilirsiniz.

Aşağıdaki kod, update_message bir iletiyi güncelleştirmek için yöntemini kullanır. Görünürlük zaman aşımı 0 olarak ayarlanır, yani ileti hemen görünür ve içerik güncellenir.

messages = queue_client.receive_messages()
list_result = next(messages)

message = queue_client.update_message(
        list_result.id, list_result.pop_receipt,
        visibility_timeout=0, content=u'Hello World Again')

print("Updated message to: " + message.content)

Kuyruk uzunluğu alma

Bir kuyruktaki ileti sayısı ile ilgili bir tahmin alabilirsiniz.

Get_queue_properties yöntemi, dahil Queue özelliklerini döndürür approximate_message_count .

properties = queue_client.get_queue_properties()
count = properties.approximate_message_count
print("Message count: " + str(count))

Sonuç yalnızca, hizmet isteğinize yanıt verdikten sonra iletiler eklenebildiğinden veya kaldırılacağından yaklaşık olur.

İletileri sıradan çıkarma

İki adımda kuyruktan bir ileti kaldırın. Kodunuz bir iletiyi işleyemezse, bu iki adımlı işlem aynı iletiyi almanızı ve yeniden denemeyi sağlar. delete_messageİleti başarıyla işlendikten sonra çağırın.

Receive_messagesçağırdığınızda sıradaki bir sonraki iletiyi varsayılan olarak alırsınız. Öğesinden döndürülen bir ileti, receive_messages Bu kuyruktan gelen diğer kod okuma iletileri için görünmez hale gelir. Varsayılan olarak bu ileti 30 saniye görünmez kalır. İletiyi kuyruktan kaldırma işleminin tamamlanabilmesi için, delete_messagede çağırmanız gerekir.

messages = queue_client.receive_messages()

for message in messages:
    print("Dequeueing message: " + message.content)
    queue_client.delete_message(message.id, message.pop_receipt)

İletilerin bir kuyruktan alınma şeklini iki yöntemle özelleştirebilirsiniz. İlk olarak toplu iletiler alabilirsiniz (en fazla 32). İkinci olarak daha uzun veya daha kısa bir görünmezlik süresi ayarlayarak kodunuzun her iletiyi tamamen işlemesi için daha az veya daha fazla zaman tanıyabilirsiniz.

Aşağıdaki kod örneği, receive_messages toplu olarak iletileri almak için yöntemini kullanır. Ardından, iç içe geçmiş bir döngü kullanarak her bir yığın içindeki her iletiyi işler for . Ayrıca her ileti için görünmezlik zaman aşımı beş dakika olarak ayarlanır.

messages = queue_client.receive_messages(messages_per_page=5, visibility_timeout=5*60)

for msg_batch in messages.by_page():
   for msg in msg_batch:
      print("Batch dequeue message: " + msg.content)
      queue_client.delete_message(msg)

Bir kuyruk silme

Bir kuyruğu ve içerdiği tüm iletileri silmek için delete_queue yöntemini çağırın.

print("Deleting queue: " + queue_client.queue_name)
queue_client.delete_queue()

İpucu

Microsoft Azure Depolama Gezgini’ni deneyin

Microsoft Azure Depolama Gezgini, Microsoft’un Windows, macOS ve Linux üzerinde Azure Depolama verileriyle görsel olarak çalışmanızı sağlayan ücretsiz ve tek başına uygulamasıdır.

Sonraki adımlar

Sıra depolamanın temellerini öğrendiğinize göre, daha fazla bilgi edinmek için bu bağlantıları izleyin.