Az Azure Queue Storage használata Pythonból
Áttekintés
Ez a cikk az Azure Queue Storage szolgáltatással kapcsolatos gyakori forgatókönyveket mutatja be. A tárgyalt forgatókönyvek közé tartozik az üzenetsor-üzenetek beszúrása, betekintése, lekérése és törlése. Az üzenetsorok létrehozására és törlésére vonatkozó kóddal is foglalkozunk.
A cikkben szereplő példák python nyelven íródnak, és a Pythonhoz készült Azure Queue Storage ügyfélkódtárat használják. Az üzenetsorokkal kapcsolatos további információkért lásd a Következő lépések szakaszt .
Mi az a Queue Storage?
Az Azure Queue Storage szolgáltatás üzenetek nagy számban történő tárolására szolgál, amelyek HTTP- vagy HTTPS-kapcsolattal, hitelesített hívásokon keresztül a világon bárhonnan elérhetők. Egyetlen üzenetsor akár 64 KB méretű is lehet, és a tárfiók maximális kapacitásán belül több millió üzenetet tartalmazhat. Az üzenetsortárat gyakran használják az aszinkron feldolgozáshoz szükséges munka hátralékának létrehozására.
Üzenetsor-szolgáltatás fogalmai
Az Azure Queue szolgáltatás a következő összetevőket tartalmazza:
Tárfiók: Az Azure Storage-hoz való hozzáférés egy tárfiókon keresztül történik. További információ a tárfiókokról: Tárfiókok áttekintése.
Üzenetsor: Az üzenetsorok üzenetek készleteit tartalmazzák. Az összes üzenetnek üzenetsorban kell lennie. Vegye figyelembe, hogy az üzenetsor neve csak kisbetűket tartalmazhat. Az üzenetsorok elnevezésével kapcsolatos információkat lásd: Naming Queues and Metadata (Üzenetsorok és metaadatok elnevezése).
Üzenet: Egy legfeljebb 64 KB méretű, tetszőleges méretű üzenet. Egy üzenet legfeljebb 7 napig maradhat egy üzenetsorban. A 2017-07-29-es vagy újabb verzió esetén a maximális élettartam bármilyen pozitív szám lehet, vagy -1, amely azt jelzi, hogy az üzenet nem jár le. Ha ez a paraméter nincs megadva, az alapértelmezett élettartam hét nap.
URL-cím formátuma: Az üzenetsorok a következő URL-címformátummal címezhetők: http://
<storage account>
.queue.core.windows.net/<queue>
Az ábra egyik üzenetsora a következő URL-címmel érhető el:
http://myaccount.queue.core.windows.net/incoming-orders
Azure-tárfiók létrehozása
Az első Azure Storage-fiók létrehozásának legegyszerűbb módja a Azure Portal használata. További tudnivalókért lásd: Create a storage account (Tárfiók létrehozása).
Ezenkívül az Azure PowerShell, az Azure CLI, illetve a .NET-keretrendszerhez készült Azure Storage erőforrás-szolgáltató használatával is létrehozhat egy Azure-tárfiókot.
Ha jelenleg nem szeretne tárfiókot létrehozni az Azure-ban, az Azurite Storage Emulator használatával helyi környezetben is futtathatja és tesztelheti a kódot. További információ: Az Azurite emulátor használata helyi Azure Storage-fejlesztéshez.
A Pythonhoz készült Azure Storage SDK letöltése és telepítése
A Pythonhoz készült Azure Storage SDK-hoz Python v2.7, v3.3 vagy újabb verzió szükséges.
Telepítés a PyPI-on keresztül
A Python-csomagindexen (PyPI) keresztül történő telepítéshez írja be a következőt:
pip install azure-storage-queue
Megjegyzés
Ha a Python 0.36-os vagy korábbi verziójához készült Azure Storage SDK-ról frissít, távolítsa el a régebbi SDK-t pip uninstall azure-storage
a legújabb csomag telepítése előtt.
Alternatív telepítési módszerekért lásd: Azure SDK for Python.
A hitelesítési adatok másolása az Azure Portalról
Amikor a mintaalkalmazás kérést küld az Azure Storage-nak, azt engedélyezni kell. A kérések engedélyezéséhez adja hozzá a tárfiók hitelesítő adatait az alkalmazáshoz kapcsolati sztring. A tárfiók hitelesítő adatainak megtekintéséhez kövesse az alábbi lépéseket:
Jelentkezzen be az Azure Portalra.
Keresse meg a Storage-fiókját.
A Tárfiók menüpanel Biztonság + hálózatkezelés területén válassza a Hozzáférési kulcsok lehetőséget. Itt megtekintheti a fiók hozzáférési kulcsait és az egyes kulcsok teljes kapcsolati sztring.
Az Access-kulcsok panelen válassza a Kulcsok megjelenítése lehetőséget.
A key1 szakaszban keresse meg a Kapcsolati sztring értékét. Válassza a Másolás vágólapra ikont a kapcsolati sztring másolásához. A kapcsolati sztring értéket hozzáadja egy környezeti változóhoz a következő szakaszban.
A tárolási kapcsolati sztring konfigurálása
A kapcsolati sztring másolása után írja be egy új környezeti változóba az alkalmazást futtató helyi gépen. A környezeti változó megadásához nyisson meg egy konzolablakot, és kövesse az operációs rendszerének megfelelő utasításokat. Cserélje le a elemet <yourconnectionstring>
a tényleges kapcsolati sztring.
setx AZURE_STORAGE_CONNECTION_STRING "<yourconnectionstring>"
Miután hozzáadta a környezeti változót a Windowsban, el kell indítania a parancsablak új példányát.
Programok újraindítása
A környezeti változó hozzáadása után indítsa újra azokat a futó programokat, amelyeknek be kell olvasniuk a környezeti változót. A folytatás előtt például indítsa újra a fejlesztési környezetet vagy a szerkesztőt.
Az alkalmazás konfigurálása a Queue Storage eléréséhez
Az QueueClient
objektum lehetővé teszi, hogy egy üzenetsorsal dolgozzon. Adja hozzá a következő kódot bármely Olyan Python-fájl tetején, amelyben programozott módon szeretne hozzáférni egy Azure-üzenetsorhoz:
from azure.storage.queue import (
QueueClient,
BinaryBase64EncodePolicy,
BinaryBase64DecodePolicy
)
import os, uuid
A os
csomag támogatást nyújt egy környezeti változó lekéréséhez. A uuid
csomag támogatja az üzenetsor nevének egyedi azonosítójának létrehozását.
Üzenetsor létrehozása
A kapcsolati sztring a rendszer a AZURE_STORAGE_CONNECTION_STRING
korábban beállított környezeti változóból kéri le.
A következő kód létrehoz egy QueueClient
objektumot a tárolási kapcsolati sztring használatával.
# 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()
Az Azure-üzenetsor üzenetei szövegként vannak tárolva. Ha bináris adatokat szeretne tárolni, állítsa be a Base64 kódolási és dekódolási függvényeket, mielőtt üzenetet helyez az üzenetsorba.
A Base64 kódolási és dekódolási függvényeinek konfigurálása az ügyfélobjektum létrehozásakor.
# 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()
)
Üzenet beszúrása egy üzenetsorba
Ha üzenetsorba szeretne beszúrni egy üzenetet, használja a metódust send_message
.
message = u"Hello World"
print("Adding message: " + message)
queue_client.send_message(message)
Betekintés az üzenetekbe
A metódus meghívásával anélkül is megtekintheti az üzeneteket, hogy eltávolítaná őket az peek_messages
üzenetsorból. Alapértelmezés szerint ez a metódus egyetlen üzenetre néz.
# Peek at the first message
messages = queue_client.peek_messages()
for peeked_message in messages:
print("Peeked message: " + peeked_message.content)
Üzenetsorban található üzenet tartalmának módosítása
Egy üzenetet tartalmát helyben, az üzenetsorban módosíthatja. Ha az üzenet egy feladatot jelöl, ezzel a funkcióval frissítheti a tevékenység állapotát.
Az alábbi kód a metódust használja egy update_message
üzenet frissítéséhez. A láthatósági időtúllépés értéke 0, ami azt jelenti, hogy az üzenet azonnal megjelenik, és a tartalom frissül.
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)
Az üzenetsor hosszának lekérése
Megbecsülheti egy üzenetsorban található üzenetek számát.
A get_queue_properties metódus üzenetsor-tulajdonságokat ad vissza, beleértve a következőt approximate_message_count
: .
properties = queue_client.get_queue_properties()
count = properties.approximate_message_count
print("Message count: " + str(count))
Az eredmény csak hozzávetőleges, mert az üzenetek hozzáadhatók vagy eltávolíthatók, miután a szolgáltatás válaszolt a kérésére.
Üzenetek törlése
Két lépésben távolítson el egy üzenetet egy üzenetsorból. Ha a kód nem tud feldolgozni egy üzenetet, ez a kétlépéses folyamat biztosítja, hogy ugyanazt az üzenetet megkapja, és próbálkozzon újra. Hívás delete_message
az üzenet sikeres feldolgozása után.
Amikor meghívja receive_messages, alapértelmezés szerint a következő üzenet lesz az üzenetsorban. A visszaadott receive_messages
üzenetek láthatatlanná válnak az üzenetsorból érkező üzeneteket olvasó többi kód számára. Alapértelmezés szerint az üzenet 30 másodpercig marad láthatatlan. Az üzenetsorból való eltávolításának befejezéséhez delete_message is fel kell hívnia.
messages = queue_client.receive_messages()
for message in messages:
print("Dequeueing message: " + message.content)
queue_client.delete_message(message.id, message.pop_receipt)
Két módon szabhatja testre az üzenetek lekérését egy üzenetsorból. Az első lehetőség az üzenetkötegek (legfeljebb 32) lekérése. A második lehetőség az, hogy beállít egy hosszabb vagy rövidebb láthatatlansági időkorlátot, így a kódnak lehetősége van hosszabb vagy rövidebb idő alatt teljesen feldolgozni az egyes üzeneteket.
Az alábbi példakód a metódust használja az receive_messages
üzenetek kötegekben való lekéréséhez. Ezután az egyes kötegekben lévő üzeneteket egy beágyazott for
hurok használatával dolgozza fel. Mindemellett a láthatatlansági időkorlátot minden üzenethez öt percre állítja be.
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)
Üzenetsor törlése
Ha törölni szeretne egy üzenetsort és az abban található összes üzenetet, hívja meg a metódust delete_queue
.
print("Deleting queue: " + queue_client.queue_name)
queue_client.delete_queue()
Tipp
Próbálja ki a Microsoft Azure Storage Explorert
A Microsoft Azure Storage Explorer egy ingyenes, önálló alkalmazás, amelynek segítségével vizuálisan dolgozhat Azure Storage-adatokkal Windows, macOS és Linux rendszereken.
Következő lépések
Most, hogy megismerte a Queue Storage alapjait, kövesse ezeket a hivatkozásokat, hogy többet tudjon meg.
- Azure Queue Storage Python API-referencia
- Python fejlesztői központ
- Azure Storage REST API-referencia
Az elavult Python 2-es SDK-kat használó kapcsolódó kódmintákért lásd: Kódminták a Python 2-es verziójával.