Så här använder du Queue Storage från C++
Tips
Prova Microsoft Azure Storage Explorer
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-klientbiblioteket för C++. De scenarier som beskrivs inkluderar att infoga, att granska, att hämta, och att radera könsmeddelanden samt att skapa och ta bort köer.
Anmärkning
Den här guiden riktar sig till Azure Storage-klientbiblioteket för C++ v1.0.0 och senare. Den rekommenderade versionen är 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 lagring av ett stort antal meddelanden som kan nås var som helst i världen via autentiserade anrop med HTTP eller HTTPS. Ett meddelande i en kö 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. Kölagring används ofta för att skapa en arbetskö för att bearbeta asynkront.
Begrepp för kötjänst
Azure Queue-tjänsten innehåller följande komponenter:
Storage-konto: All åtkomst till Azure Storage görs via ett lagringskonto. Mer information om lagringskonton finns i Översikt över lagringskonto.
Kö: en kö innehåller en uppsättning meddelanden. Alla meddelanden måste vara i en kö. Observera att könsnamnet måste vara endast 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 tiden som ett meddelande kan finnas kvar 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 standardlivslängden sju dagar.
URL-format: Köer kan adresseras med hjälp av 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-lagringskonto är att använda Azure-portalen. För mer information, se Skapa ett lagringskonto.
Du kan också skapa ett Azure Storage-konto med hjälp av Azure PowerShell, Azure CLIeller Azure Storage Resource Provider för .NET.
Om du föredrar att inte skapa ett lagringskonto i Azure just nu kan du även använda Azurite Storage-emulatorn för att köra och testa koden 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-klientbiblioteket för C++ och skapa ett Azure Storage-konto i din Azure-prenumeration.
Om du vill installera Azure Storage-klientbiblioteket för C++, kan du använda följande metoder:
- Linux: Följ anvisningarna i Azure Storage-klientbiblioteket för C++ README: Komma igång med Linux-sidan.
-
Windows: I Windows använder du vcpkg som beroendehanterare. Följ snabbstart 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 filen README.
Konfigurera ditt program för åtkomst till Queue Storage
Lägg till följande inkluderingsinstruktioner överst i C++-filen där du vill använda Azure Storage-API:erna för att komma åt 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 lagringsanslutningssträngen i följande format med hjälp av namnet på ditt lagringskonto och lagringsåtkomstnyckeln för lagringskontot som anges i Azure-portalen för värdena för 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 ditt program på din lokala 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. I följande exempel visas hur du kan deklarera ett statiskt fält för att lagra anslutningssträngen till din lokala lagringsemulator:
// 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 lagringsanslutningssträngen.
Hämta anslutningssträngen
Du kan använda cloud_storage_account
klassen för att representera din lagringskontoinformation. Om du vill hämta lagringskontoinformationen från lagringsanslutningssträngen kan du använda metoden parse
.
// 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 ett cloud_queue_client
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ö 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();
Anvisningar: 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 därefter metoden add_message
. 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);
Så här gör du: 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 metoden peek_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"));
// 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;
Anvisningar: Ändra innehållet i ett köat meddelande
Du kan ändra innehållet i ett meddelande på plats 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 anger tidsgränsen för synlighet för att förlänga ytterligare 60 sekunder. Detta sparar tillståndet för det arbete som är associerat med meddelandet och ger klienten ytterligare en minut för att fortsätta arbeta med meddelandet. Du kan använda den här tekniken för att spåra arbetsflöden med 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. Vanligtvis behåller du även antalet återförsök, och om meddelandet görs på nytt fler än n gånger tar du bort det. Detta skyddar mot ett meddelande som utlöser ett programfel varje gång det 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: Avmarkera nästa meddelande
Koden tar bort ett meddelande från en kö i två steg. När du anropar get_message
visas nästa meddelande i en kö. Ett meddelande som returneras från get_message
blir osynligt för andra kodläsningsmeddelanden från den här kön. Om du vill slutföra borttagningen av meddelandet från kön måste du även anropa delete_message
. Den här tvåstegsprocessen för att ta bort ett meddelande säkerställer att om koden inte kan bearbeta ett meddelande på grund av maskinvaru- eller programvarufel kan en annan instans av koden få 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);
Så här gör du: Använd ytterligare alternativ för att ta bort meddelanden
Det finns två sätt att anpassa meddelandehämtning från en kö. Först kan du få en batch med meddelanden (upp till 32). För det andra kan du ange en längre eller kortare tidsgräns för osynlighet, vilket ger koden mer eller mindre tid att bearbeta varje meddelande fullständigt. I följande kodexempel används metoden get_messages
för att hämta 20 meddelanden i ett anrop. Sedan bearbetas varje meddelande med hjälp av en for
-loop. Den anger också 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 sedan anropet till get_messages
visas alla meddelanden som 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;
}
Anvisningar: Hämta kölängden
Du kan få 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;
Anvisningar: Ta bort en kö
Om du vill ta bort en kö och alla meddelanden som finns i den anropar du metoden delete_queue_if_exists
i 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 följer du de här länkarna för att lära dig mer om Azure Storage.