Så använder du Queue Storage från C++
Tips
Prova Microsoft Azure Lagringsutforskaren
Microsoft Azure Storage Explorer är en kostnadsfri, fristående app från Microsoft som gör det möjligt att arbeta visuellt med Azure Storage-data i Windows, macOS och Linux.
Översikt
Den här guiden visar hur du utför vanliga scenarier med hjälp av Azure Queue Storage-tjänsten. Exemplen är skrivna i C++ och använder Azure Storage klientbibliotek för C++. Scenarierna som beskrivs är att infoga, granska, hämta och ta bort kömeddelanden, samt att skapa och ta bort köer.
Anteckning
Den här guiden riktar Azure Storage klientbiblioteket för C++ v1.0.0 och högre. Den rekommenderade versionen Azure Storage klientbiblioteket v2.2.0, som är tillgängligt via NuGet eller GitHub.
Vad är Queue Storage?
Azure Queue Storage är en tjänst för att lagra stora mängder meddelanden som kan nås från var som helst i världen via autentiserade anrop med HTTP eller HTTPS. Ett enda kömeddelande kan vara upp till 64 KB stort och en kö kan innehålla miljontals meddelanden, upp till den totala kapacitetsgränsen för ett lagringskonto. Queue Storage används ofta för att skapa en efter släpning av arbete som ska bearbetas asynkront.
Kötjänst begrepp
Azure-Kötjänst innehåller följande komponenter:

Lagringskonto: All åtkomst till Azure Storage görs genom ett lagringskonto. Mer information om lagrings konton finns i Översikt över lagrings konto.
Kö: en kö innehåller en uppsättning meddelanden. Alla meddelanden måste vara i en kö. Observera att könamnet måste vara helt i gemener. Mer information om namngivning av köer finns i namngivning av köer och metadata.
Meddelande: ett meddelande i valfritt format, som är upp till 64 KB. Den maximala tid som ett meddelande kan finnas i kön är 7 dagar. För version 2017-07-29 eller senare kan den maximala tiden till Live vara ett positivt tal eller-1 som anger att meddelandet inte upphör att gälla. Om den här parametern utelämnas, är standardvärdet för Time-to-Live sju dagar.
URL-format: Köer är adresser bara med följande URL-format: http://
<storage account>. Queue.Core.Windows.net/<queue>Följande URL adresserar en kö i diagrammet:
http://myaccount.queue.core.windows.net/incoming-orders
Skapa ett Azure Storage-konto
Det enklaste sättet att skapa ditt första Azure Storage-konto är att använda Azure Portal. Läs mer i Skapa ett lagringskonto.
Du kan också skapa ett Azure Storage-konto med Azure PowerShell, Azure CLI eller Azure Storage-resursprovidern för .NET.
Om du inte vill skapa ett lagrings konto i Azure just nu kan du också använda Azurite-emulatorn för att köra och testa din kod i en lokal miljö. Mer information finns i använda Azurite-emulatorn för lokal Azure Storage utveckling.
Skapa ett C++-program
I den här guiden använder du lagringsfunktioner som kan köras i ett C++-program.
För att göra det måste du installera Azure Storage för C++ och skapa ett Azure Storage i din Azure-prenumeration.
Om du vill Azure Storage klientbiblioteket för C++ kan du använda följande metoder:
- Linux: Följ anvisningarna i Azure Storage för C++ README: Komma igång på Linux-sidan.
- Windows: På Windows du vcpkg som beroendehanterare. Följ snabbstarten för att initiera
vcpkg. Använd sedan följande kommando för att installera biblioteket:
.\vcpkg.exe install azure-storage-cpp
Du hittar en guide för hur du skapar källkoden och exporterar till NuGet i README-filen.
Konfigurera ditt program för att få åtkomst till Queue Storage
Lägg till följande include-instruktioner överst i C++-filen där du vill använda api Azure Storage för att få åtkomst till köer:
#include <was/storage_account.h>
#include <was/queue.h>
Konfigurera en Azure Storage-anslutningssträng
En Azure Storage-klient använder en lagringsanslutningssträng för att lagra slutpunkter och autentiseringsuppgifter för åtkomst till datahanteringstjänster. När du kör i ett klientprogram måste du ange anslutningssträngen för lagring i följande format med namnet på ditt lagringskonto och lagringsåtkomstnyckeln för lagringskontot som anges i Azure Portal för värdena AccountName och AccountKey . Information om lagringskonton och åtkomstnycklar finns i Om Azure Storage konton. Det här exemplet visar hur du kan deklarera ett statiskt fält för lagring av anslutningssträngen:
// 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"));
Om du vill testa programmet i din Windows dator kan du använda Azurite Storage-emulatorn. Azurite är ett verktyg som simulerar Azure Blob Storage och Queue Storage på din lokala utvecklingsdator. Följande exempel visar hur du kan deklarera ett statiskt fält för lagring av anslutningssträngen i den lokala lagringsemulatorn:
// Define the connection-string with Azurite.
const utility::string_t storage_connection_string(U("UseDevelopmentStorage=true;"));
Information om hur du startar Azurite finns i Använda Azurite-emulatorn för lokal Azure Storage utveckling.
Följande exempel förutsätter att du har använt någon av dessa två metoder för att hämta Azure Storage-anslutningssträngen.
Hämta anslutningssträngen
Du kan använda klassen cloud_storage_account för att representera information om ditt lagringskonto. Om du vill hämta information om ditt lagringskonto från lagringsanslutningssträngen kan du använda parse metoden .
// Retrieve storage account from connection string.
azure::storage::cloud_storage_account storage_account = azure::storage::cloud_storage_account::parse(storage_connection_string);
Gör så här: Skapa en kö
Med cloud_queue_client ett -objekt kan du hämta referensobjekt för köer. Följande kod skapar ett cloud_queue_client -objekt.
// 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();
Använd cloud_queue_client -objektet för att hämta en referens till den kö som du vill använda. Du kan skapa kön om den inte finns.
// 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();
Gör så här: Infoga ett meddelande i en kö
Om du vill infoga ett meddelande i en befintlig kö skapar du först en ny cloud_queue_message . Anropa sedan add_message metoden . En cloud_queue_message kan skapas från antingen en sträng (i UTF-8-format) eller en bytematris. Här är kod som skapar en kö (om den inte finns) och infogar meddelandet 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);
Gör så här: Titta på nästa meddelande
Du kan titta på meddelandet framför en kö utan att ta bort det från kön genom att anropa peek_message metoden .
// 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;
Gör så här: Ändra innehållet i ett meddelande i kö
Du kan ändra innehållet i ett meddelande direkt i kön. Om meddelandet representerar en arbetsuppgift kan du använda den här funktionen för att uppdatera arbetsuppgiftens status. Följande kod uppdaterar kömeddelandet med nytt innehåll och utökar tidsgränsen för visning med ytterligare 60 sekunder. Koden sparar statusen för arbetsuppgiften som associeras med meddelandet och ger klienten ytterligare en minut att fortsätta arbeta med meddelandet. Du kan använda den här tekniken för att spåra arbetsflöden i flera steg i kömeddelanden, utan att behöva börja om från början om ett bearbetningssteg misslyckas på grund av maskinvaru- eller programvarufel. Normalt räknar du även antalet omförsök och tar bort meddelandet om fler än n försök misslyckas. Detta skyddar mot meddelanden som utlöser ett programfel varje gång de bearbetas.
// 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;
Gör så här: Ta bort nästa meddelande i frånkö
Din kod tar bort ett meddelande från en kö i två steg. När du get_message anropar får du nästa meddelande i en kö. Ett meddelande som returneras get_message från blir osynligt för andra kodläsningsmeddelanden från den här kön. För att slutföra borttagningen av meddelandet från kön måste du också anropa delete_message . Den här tvåstegsprocessen för att ta bort ett meddelande säkerställer att om din kod inte kan bearbeta ett meddelande på grund av ett maskin- eller programvarufel så kan en annan instans av koden hämta samma meddelande och försöka igen. Koden anropar delete_message direkt efter att meddelandet har bearbetats.
// 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);
Gör så här för att: Använda ytterligare alternativ för att ta bort meddelanden
Det finns två metoder som du kan använda för att anpassa meddelandehämtningen från en kö. För det första kan du hämta en grupp med meddelanden (upp till 32). För det andra kan du ange en längre eller kortare tidsgräns för osynlighet för att ge koden mer eller mindre tid att bearbeta klart varje meddelande. I följande kodexempel används metoden get_messages för att hämta 20 meddelanden i ett anrop. Sedan bearbetar den varje meddelande med hjälp av en for loop. Koden ställer också in tidsgränsen för osynlighet till fem minuter för varje meddelande. Observera att de fem minuterna startar för alla meddelanden samtidigt, så efter fem minuter har gått sedan anropet till , visas alla meddelanden som get_messages inte har tagits bort igen.
// 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;
}
Gör så här: Hämta kölängden
Du kan hämta en uppskattning av antalet meddelanden i en kö. Metoden download_attributes returnerar köegenskaper inklusive antalet meddelanden. Metoden approximate_message_count hämtar det ungefärliga antalet meddelanden i kön.
// 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;
Gör så här: Ta bort en kö
Om du vill ta bort en kö och alla meddelanden som finns i den delete_queue_if_exists anropar du metoden för köobjektet.
// 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();
Nästa steg
Nu när du har lärt dig grunderna i Queue Storage kan du följa dessa länkar för att lära dig mer om Azure Storage.