Python'dan Azure Kuyruk Depolama'yı kullanma
Genel Bakış
Bu makalede Azure Kuyruk Depolama hizmetinin kullanıldığı yaygın senaryolar gösterilmektedir. Kapsanan senaryolar arasında kuyruk iletilerini ekleme, göz atma, alma ve silme sayılabilir. Kuyruk oluşturma ve silme kodu da ele alınmıştır.
Bu makaledeki örnekler Python'da yazılmıştır ve Python için Azure Kuyruk Depolama istemci 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şlenmek üzere bir iş kapsamı oluşturmak için kullanılır.
Kuyruk hizmeti kavramları
Azure Kuyruk hizmeti aşağıdaki bileşenleri içerir:
Depolama Hesabı: Azure Depolama'ya tüm erişim bir depolama hesabı üzerinden gerçekleştirilir. 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 yaşam süresi üst sınırı 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 depolama hesabı oluşturmamayı tercih ediyorsanız, kodunuzu yerel bir ortamda çalıştırmak ve test etmek için Azurite depolama öykünücüsü de kullanabilirsiniz. Daha fazla bilgi için bkz. Yerel Azure Depolama geliştirmesi için Azurite öykünücüsü kullanma.
Python için Azure Depolama SDK'sını 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 şunu yazın:
pip install azure-storage-queue
Not
Python v0.36 veya önceki sürümleri için Azure Depolama SDK'sından yükseltme yapıyorsanız, en son paketi yüklemeden önce kullanarak pip uninstall azure-storage
eski 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'ya istekte bulunurken yetkilendirilmelidir. 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 şu adımları izleyin:
Azure Portal oturum açın.
Depolama hesabınızı bulun.
Depolama hesabı menü bölmesindeki Güvenlik + ağ altında Erişim anahtarları'nı seçin. Burada hesap erişim anahtarlarını ve her anahtarın tam bağlantı dizesini görüntüleyebilirsiniz.
Erişim anahtarları bölmesinde Anahtarları göster'i seçin.
key1 bölümünde Bağlantı dizesi değerini bulun. Bağlantı dizesini kopyalamak için Panoya kopyala simgesini seçin. Sonraki bölümde bağlantı dizesi değerini bir ortam değişkenine ekleyeceksiniz.
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. değerini gerçek bağlantı dizenizle değiştirin <yourconnectionstring>
.
setx AZURE_STORAGE_CONNECTION_STRING "<yourconnectionstring>"
Windows'da ortam değişkenini ekledikten sonra komut penceresinin yeni bir örneğini başlatmanız gerekir.
Programları yeniden başlatma
Ortam değişkenini ekledikten sonra ortam değişkenini okuması gereken tüm çalışan programları yeniden başlatın. Örneğin, devam etmeden önce geliştirme ortamınızı veya düzenleyicinizi yeniden başlatın.
Uygulamanızı Kuyruk Depolama'ya erişecek şekilde yapılandırma
QueueClient
nesnesi bir kuyrukla çalışmanızı sağlar. Bir Azure kuyruğuna program aracılığıyla erişmek istediğiniz Python dosyasının üst kısmına aşağıdaki kodu ekleyin:
from azure.storage.queue import (
QueueClient,
BinaryBase64EncodePolicy,
BinaryBase64DecodePolicy
)
import os, uuid
Paket, os
ortam değişkenini alma desteği sağlar. Paket, uuid
kuyruk adı için benzersiz bir tanımlayıcı oluşturma desteği sağlar.
Bir kuyruk oluşturma
Bağlantı dizesi daha önce ayarlanan ortam değişkeninden AZURE_STORAGE_CONNECTION_STRING
alınır.
Aşağıdaki kod, depolama bağlantı dizesini kullanarak bir QueueClient
nesne 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 ileti yerleştirmeden önce Base64 kodlama ve kod çözme işlevlerini ayarlayın.
İstemci nesnesini oluştururken Base64 kodlama 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
Kuyruğa ileti eklemek için yöntemini kullanın send_message
.
message = u"Hello World"
print("Adding message: " + message)
queue_client.send_message(message)
İletilere göz atma
yöntemini çağırarak peek_messages
kuyruktan kaldırmadan iletilere göz atabilirsiniz. Varsayılan olarak, bu yöntem tek bir iletiye bakar.
# 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üncelleştirilir.
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 olmak üzere approximate_message_count
kuyruk özelliklerini döndürür.
properties = queue_client.get_queue_properties()
count = properties.approximate_message_count
print("Message count: " + str(count))
Sonuç yalnızca yaklaşıktır çünkü hizmet isteğinize yanıt verdikten sonra iletiler eklenebilir veya kaldırılabilir.
İletilerin sıralamalarını kaldırma
İki adımda kuyruktan bir iletiyi kaldırma. Kodunuz bir iletiyi işleyemezse, bu iki adımlı işlem aynı iletiyi alıp yeniden denemenizi sağlar. İleti başarıyla işlendikten sonra çağrısı delete_message
.
receive_messages çağırdığınızda, kuyruktaki bir sonraki iletiyi varsayılan olarak alırsınız. tarafından receive_messages
döndürülen bir ileti, bu kuyruktan gelen iletileri okuyan diğer kodlar için görünmez hale gelir. Varsayılan olarak bu ileti 30 saniye görünmez kalır. İletiyi kuyruktan kaldırmayı tamamlamak için delete_message de ç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, toplu iletileri almak için yöntemini kullanır receive_messages
. Ardından iç içe for
döngü kullanarak her toplu işlem içindeki her iletiyi işler. 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çindeki tüm iletileri silmek için yöntemini çağırın delete_queue
.
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
Kuyruk Depolama'nın temellerini öğrendiğinize göre, daha fazla bilgi edinmek için bu bağlantıları izleyin.
- Azure Kuyruk Depolama Python API başvurusu
- Python geliştirici merkezi
- Azure Depolama REST API başvurusu
Kullanım dışı bırakılan Python sürüm 2 SDK'larını kullanan ilgili kod örnekleri için bkz. Python sürüm 2'yi kullanan kod örnekleri.