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 skrivs i C++ och använder Azure Storage-klientbiblioteket för C++. De scenarier som beskrivs omfattar infogning, tittning, hämtar och tar bort kömeddelanden, samt att skapa och ta bort köer.

Anteckning

Den här guiden riktar sig till Azure Storage-klientbiblioteket för C++ v1.0.0 och senare. Den rekommenderade versionen är Azure Storage-klientbibliotek 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. Kölagring används ofta för att skapa en kvarvarande arbetslogg för att bearbeta asynkront.

Begrepp för kötjänst

Azure Queue-tjänsten innehåller följande komponenter:

Azure Queue-tjänstkomponenter

  • Lagringskonto: All åtkomst till Azure Storage görs genom 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ö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 time-to-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 standardtiden att leva sju dagar.

  • URL-format: Köer kan adresseras 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 föredrar att inte skapa ett lagringskonto i Azure just nu kan du också 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:

.\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 åtkomst till Queue Storage

Lägg till följande include-instruktioner ö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 anslutningssträng för lagring 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 namnet på ditt lagringskonto och lagringsåtkomstnyckeln för lagringskontot som anges i Azure Portal för AccountName värdena 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 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. 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 cloud_storage_account klassen för att representera din lagringskontoinformation. Om du vill hämta lagringskontoinformationen från lagringsanslutningssträngen parse kan du använda metoden .

// Retrieve storage account from connection string.
azure::storage::cloud_storage_account storage_account = azure::storage::cloud_storage_account::parse(storage_connection_string);

Anvisningar: 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 objektet cloud_queue_client 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();  

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 add_message sedan -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);  

Anvisningar: 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;

Anvisningar: Ändra innehållet i ett köat meddelande

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

Anvisningar: Avmarkera nästa meddelande

Koden tar bort ett meddelande från en kö i två steg. När du anropar get_messagefår du 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 ta bort 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 anropas 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);

Anvisningar: Använd ytterligare alternativ för att avqueuera 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 get_messages metoden för att hämta 20 meddelanden i ett anrop. Sedan bearbetas 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å när fem minuter har gått sedan anropet till get_messagesvisas 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 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;  

Anvisningar: Ta bort en kö

Om du vill ta bort en kö och alla meddelanden som finns i den anropar delete_queue_if_exists 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 följer du de här länkarna för att lära dig mer om Azure Storage.