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:

Az Azure Queue szolgáltatás összetevői

  • 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:

  1. Jelentkezzen be az Azure Portalra.

  2. Keresse meg a Storage-fiókját.

  3. 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.

    Képernyőkép arról, hogy hol találhatók a hozzáférési kulcs beállításai a Azure Portal

  4. Az Access-kulcsok panelen válassza a Kulcsok megjelenítése lehetőséget.

  5. 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 kapcsolati sztring az Azure Portalról történő másolását bemutató képernyőkép

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.

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.