A Queue Storage használata C++-szal
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.
Áttekintés
Ez az útmutató bemutatja, hogyan hajthat végre gyakori forgatókönyveket az Azure Queue Storage szolgáltatással. A minták C++ nyelven vannak megírva, és az Azure Storage C++ ügyfélkódtárát használják. A tárgyalt forgatókönyvek közé tartozik az üzenetsor-üzenetek beszúrása, betekintése, lekérése és törlése , valamint az üzenetsorok létrehozása és törlése.
Megjegyzés
Ez az útmutató az Azure Storage C++ 1.0.0-s vagy újabb verzióhoz készült ügyfélkódtárát célozza meg. Az ajánlott verzió az Azure Storage 2.2.0-s verziójú ügyfélkódtára, amely a NuGeten vagy a GitHubon keresztül érhető el.
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. A Queue Storage-ot gyakran használják a feladatok hátralékának létrehozására az aszinkron feldolgozáshoz.
Üzenetsor-szolgáltatással kapcsolatos fogalmak
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 ezt a paramétert nem adja meg, az alapértelmezett élettartam hét nap.
URL-formátum: Az üzenetsorok a következő URL-formátumban 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 az 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.
C++-alkalmazás létrehozása
Ebben az útmutatóban olyan tárolási funkciókat fog használni, amelyek egy C++ alkalmazáson belül futtathatók.
Ehhez telepítenie kell az Azure Storage C++ ügyfélkódtárát, és létre kell hoznia egy Azure Storage-fiókot az Azure-előfizetésében.
A C++-hoz készült Azure Storage-ügyfélkódtár telepítéséhez az alábbi módszereket használhatja:
- Linux: Kövesse az Azure Storage C++ README: Első lépések linuxos ügyfélkódtárában megadott utasításokat.
- Windows: Windows rendszeren használja a vcpkg-t függőségkezelőként. A inicializálásához kövesse a rövid útmutatót
vcpkg
. Ezután a következő paranccsal telepítse a kódtárat:
.\vcpkg.exe install azure-storage-cpp
A README fájlban talál egy útmutatót a forráskód létrehozásához és a NuGetbe való exportáláshoz.
Az alkalmazás konfigurálása a Queue Storage eléréséhez
Adja hozzá a következő belefoglalási utasításokat a C++ fájl elejéhez, ahol az Azure Storage API-kat szeretné használni az üzenetsorok eléréséhez:
#include <was/storage_account.h>
#include <was/queue.h>
Azure Storage kapcsolati sztring beállítása
Az Azure Storage-ügyfelek tárolási kapcsolati sztring használnak végpontok és hitelesítő adatok tárolására az adatkezelési szolgáltatások eléréséhez. Ügyfélalkalmazásban való futtatáskor a következő formátumban kell megadnia a tárolási kapcsolati sztring a tárfiók neve és a tárfiók tárelérési kulcsa használatával, amely a és AccountKey
az értékek Azure PortalAccountName
szerepel. További információ a tárfiókokról és a hozzáférési kulcsokról: Tudnivalók az Azure Storage-fiókokról. Ez a példa bemutatja, hogyan deklarálhat statikus mezőt a kapcsolati sztring tárolására:
// Define the connection-string with your values.
const utility::string_t storage_connection_string(U("DefaultEndpointsProtocol=https;AccountName=your_storage_account;AccountKey=your_storage_account_key"));
Az alkalmazás helyi Windows-számítógépen való teszteléséhez használhatja az Azurite storage emulátort. Az Azurite egy segédprogram, amely szimulálja a Azure Blob Storage és a Queue Storage-ot a helyi fejlesztői gépen. A következő példa bemutatja, hogyan deklarálhat statikus mezőt a helyi Storage Emulatorhoz használható kapcsolati sztring tárolására:
// Define the connection-string with Azurite.
const utility::string_t storage_connection_string(U("UseDevelopmentStorage=true;"));
Az Azurite elindításához lásd : Az Azurite emulátor használata helyi Azure Storage-fejlesztéshez.
Az alábbi minták azt feltételezik, hogy az ezen két módszer egyikével kérte le a Storage kapcsolati sztringjét.
A kapcsolati sztring lekérése
A osztály használatával cloud_storage_account
képviselheti a tárfiók adatait. A tárfiók adatainak a tárolási kapcsolati sztring való lekéréséhez használhatja a metódustparse
.
// Retrieve storage account from connection string.
azure::storage::cloud_storage_account storage_account = azure::storage::cloud_storage_account::parse(storage_connection_string);
Útmutató: Üzenetsor létrehozása
Egy cloud_queue_client
objektum lehetővé teszi az üzenetsorok referenciaobjektumainak lekérését. Az alábbi kód létrehoz egy objektumot cloud_queue_client
.
// Retrieve storage account from connection string.
azure::storage::cloud_storage_account storage_account = azure::storage::cloud_storage_account::parse(storage_connection_string);
// Create a queue client.
azure::storage::cloud_queue_client queue_client = storage_account.create_cloud_queue_client();
cloud_queue_client
Az objektum használatával lekérheti a használni kívánt üzenetsorra mutató hivatkozást. Ha nem létezik, létrehozhatja az üzenetsort.
// Retrieve a reference to a queue.
azure::storage::cloud_queue queue = queue_client.get_queue_reference(U("my-sample-queue"));
// Create the queue if it doesn't already exist.
queue.create_if_not_exists();
Útmutató: Üzenet beszúrása üzenetsorba
Ha üzenetet szeretne beszúrni egy meglévő üzenetsorba, először hozzon létre egy újat cloud_queue_message
. Ezután hívja meg a metódust add_message
. Egy cloud_queue_message
sztringből (UTF-8 formátumban) vagy bájttömbből hozható létre. Íme egy kód, amely létrehoz egy üzenetsort (ha nem létezik), és beszúrja az üzenetet Hello, World
:
// Retrieve storage account from connection-string.
azure::storage::cloud_storage_account storage_account = azure::storage::cloud_storage_account::parse(storage_connection_string);
// Create the queue client.
azure::storage::cloud_queue_client queue_client = storage_account.create_cloud_queue_client();
// Retrieve a reference to a queue.
azure::storage::cloud_queue queue = queue_client.get_queue_reference(U("my-sample-queue"));
// Create the queue if it doesn't already exist.
queue.create_if_not_exists();
// Create a message and add it to the queue.
azure::storage::cloud_queue_message message1(U("Hello, World"));
queue.add_message(message1);
Útmutató: Betekintés a következő üzenetbe
A metódus meghívásával betekinthet az üzenetsor elejére anélkül, hogy eltávolítaná azt az peek_message
üzenetsorból.
// Retrieve storage account from connection-string.
azure::storage::cloud_storage_account storage_account = azure::storage::cloud_storage_account::parse(storage_connection_string);
// Create the queue client.
azure::storage::cloud_queue_client queue_client = storage_account.create_cloud_queue_client();
// Retrieve a reference to a queue.
azure::storage::cloud_queue queue = queue_client.get_queue_reference(U("my-sample-queue"));
// Peek at the next message.
azure::storage::cloud_queue_message peeked_message = queue.peek_message();
// Output the message content.
std::wcout << U("Peeked message content: ") << peeked_message.content_as_string() << std::endl;
Útmutató: Üzenetsorba helyezett üzenet tartalmának módosítása
Egy üzenetet tartalmát helyben, az üzenetsorban módosíthatja. Ha az üzenet munkafeladatot jelöl, ezzel a funkcióval frissítheti a munkafeladat állapotát. Az alábbi kód frissíti az üzenetsorban található üzenetet az új tartalommal, és a láthatósági időkorlátot további 60 másodperccel bővíti. Elmenti az üzenethez társított feladat állapotát, és az ügyfél számára további egy percet biztosít az üzenet használatának folytatására. Ezzel a technikával nyomon követheti a többlépéses munkafolyamatokat az üzenetsor-üzeneteken anélkül, hogy elölről kellene kezdenie, ha egy feldolgozási lépés hardver- vagy szoftverhiba miatt meghiúsul. A rendszer általában nyilván tartja az újrapróbálkozások számát, és ha az üzenettel n alkalomnál többször próbálkoznak, akkor törlődik. Ez védelmet biztosít az ellen, hogy egy üzenetet minden feldolgozásakor kiváltson egy alkalmazáshibát.
// Retrieve storage account from connection-string.
azure::storage::cloud_storage_account storage_account = azure::storage::cloud_storage_account::parse(storage_connection_string);
// Create the queue client.
azure::storage::cloud_queue_client queue_client = storage_account.create_cloud_queue_client();
// Retrieve a reference to a queue.
azure::storage::cloud_queue queue = queue_client.get_queue_reference(U("my-sample-queue"));
// Get the message from the queue and update the message contents.
// The visibility timeout "0" means make it visible immediately.
// The visibility timeout "60" means the client can get another minute to continue
// working on the message.
azure::storage::cloud_queue_message changed_message = queue.get_message();
changed_message.set_content(U("Changed message"));
queue.update_message(changed_message, std::chrono::seconds(60), true);
// Output the message content.
std::wcout << U("Changed message content: ") << changed_message.content_as_string() << std::endl;
Útmutató: A következő üzenet törlése
A kód két lépésben töröl egy üzenetet egy üzenetsorból. A hívásakor get_message
a következő üzenet egy üzenetsorba kerül. A visszaadott get_message
üzenetek láthatatlanná válnak az üzenetsorból érkező üzeneteket olvasó többi kód számára. Az üzenet üzenetsorból való eltávolításának befejezéséhez meg kell hívnia a következőt delete_message
is: . Az üzenetek kétlépéses eltávolítása lehetővé teszi, hogy ha a kód hardver- vagy szoftverhiba miatt nem tud feldolgozni egy üzenetet, a kód egy másik példánya megkaphassa ugyanazt az üzenetet, és újra megpróbálkozhasson a feldolgozásával. A kód közvetlenül az üzenet feldolgozása után hív delete_message
.
// Retrieve storage account from connection-string.
azure::storage::cloud_storage_account storage_account = azure::storage::cloud_storage_account::parse(storage_connection_string);
// Create the queue client.
azure::storage::cloud_queue_client queue_client = storage_account.create_cloud_queue_client();
// Retrieve a reference to a queue.
azure::storage::cloud_queue queue = queue_client.get_queue_reference(U("my-sample-queue"));
// Get the next message.
azure::storage::cloud_queue_message dequeued_message = queue.get_message();
std::wcout << U("Dequeued message: ") << dequeued_message.content_as_string() << std::endl;
// Delete the message.
queue.delete_message(dequeued_message);
Útmutató: További lehetőségek használata az üzenetek törléséhez
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 get_messages
metódust használja 20 üzenet lekérésére egy hívásban. Ezután az egyes üzeneteket egy for
hurok használatával dolgozza fel. Mindemellett a láthatatlansági időkorlátot minden üzenethez öt percre állítja be. Vegye figyelembe, hogy az öt perc az összes üzenetnél egy időben kezdődik, így a hívás get_messages
óta eltelt öt perc elteltével a nem törölt üzenetek ismét láthatóvá válnak.
// Retrieve storage account from connection-string.
azure::storage::cloud_storage_account storage_account = azure::storage::cloud_storage_account::parse(storage_connection_string);
// Create the queue client.
azure::storage::cloud_queue_client queue_client = storage_account.create_cloud_queue_client();
// Retrieve a reference to a queue.
azure::storage::cloud_queue queue = queue_client.get_queue_reference(U("my-sample-queue"));
// Dequeue some queue messages (maximum 32 at a time) and set their visibility timeout to
// 5 minutes (300 seconds).
azure::storage::queue_request_options options;
azure::storage::operation_context context;
// Retrieve 20 messages from the queue with a visibility timeout of 300 seconds.
std::vector<azure::storage::cloud_queue_message> messages = queue.get_messages(20, std::chrono::seconds(300), options, context);
for (auto it = messages.cbegin(); it != messages.cend(); ++it)
{
// Display the contents of the message.
std::wcout << U("Get: ") << it->content_as_string() << std::endl;
}
Útmutató: Az üzenetsor hosszának lekérése
Megbecsülheti egy üzenetsorban található üzenetek számát. A download_attributes
metódus üzenetsor-tulajdonságokat ad vissza, beleértve az üzenetszámot is. A approximate_message_count
metódus lekéri az üzenetsorban lévő üzenetek hozzávetőleges számát.
// Retrieve storage account from connection-string.
azure::storage::cloud_storage_account storage_account = azure::storage::cloud_storage_account::parse(storage_connection_string);
// Create the queue client.
azure::storage::cloud_queue_client queue_client = storage_account.create_cloud_queue_client();
// Retrieve a reference to a queue.
azure::storage::cloud_queue queue = queue_client.get_queue_reference(U("my-sample-queue"));
// Fetch the queue attributes.
queue.download_attributes();
// Retrieve the cached approximate message count.
int cachedMessageCount = queue.approximate_message_count();
// Display number of messages.
std::wcout << U("Number of messages in queue: ") << cachedMessageCount << std::endl;
Útmutató: Ü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_if_exists
az üzenetsor-objektumon.
// Retrieve storage account from connection-string.
azure::storage::cloud_storage_account storage_account = azure::storage::cloud_storage_account::parse(storage_connection_string);
// Create the queue client.
azure::storage::cloud_queue_client queue_client = storage_account.create_cloud_queue_client();
// Retrieve a reference to a queue.
azure::storage::cloud_queue queue = queue_client.get_queue_reference(U("my-sample-queue"));
// If the queue exists and delete it.
queue.delete_queue_if_exists();
Következő lépések
Most, hogy megismerte a Queue Storage alapjait, kövesse ezeket a hivatkozásokat, hogy többet tudjon meg az Azure Storage-ról.