Azure Queue Storage gebruiken vanuit Node.js
Overzicht
Deze handleiding laat zien hoe u algemene scenario's kunt uitvoeren met behulp van Azure Queue Storage. De voorbeelden worden geschreven met behulp van de Node.js API. De scenario's die worden behandeld, zijn onder andere het invoegen, bekijken, ophalen en verwijderen van wachtrijberichten. Leer ook hoe u wachtrijen maakt en verwijdert.
Wat is Queue Storage?
Azure Queue Storage is een service voor de opslag van grote aantallen berichten die via HTTP of HTTPS overal vandaan kunnen worden opgevraagd met geverifieerde aanroepen. Een enkel wachtrijbericht mag maximaal 64 KB groot zijn en een wachtrij kan miljoenen berichten bevatten, tot de totale capaciteitslimiet van een opslagaccount. Queue Storage wordt vaak gebruikt om een achterstand van werk te maken die asynchroon moet worden verwerkt.
Concepten van Queue-service
De Azure Queue-service bevat de volgende onderdelen:
Opslagaccount: Alle toegang tot Azure Storage wordt uitgevoerd via een opslagaccount. Zie Overzicht van opslagaccount voor meer informatie over opslagaccounts.
Wachtrij: Een wachtrij bevat een set berichten. Alle berichten moeten zich in een wachtrij bevinden. De naam van een wachtrij mag alleen kleine letters bevatten. Zie Naming Queues and Metadata (Wachtrijen en metagegevens een naam geven) voor informatie over de naamgeving van wachtrijen.
Bericht: Een bericht in een willekeurige indeling, van maximaal 64 KB. Een bericht kan maximaal 7 dagen in de wachtrij blijven staan. Voor versie 29-07-2017 of hoger mag de maximale time-to-live elk positief getal zijn. Of -1 om aan te geven dat het bericht niet verloopt. Als deze parameter wordt weggelaten, is de standaard time-to-live zeven dagen.
URL-indeling: Wachtrijen kunnen worden adresseerbaar met de volgende URL-indeling: http://
<storage account>
.queue.core.windows.net/<queue>
Met de volgende URL wordt een wachtrij in het diagram opgevraagd:
http://myaccount.queue.core.windows.net/incoming-orders
Een Azure-opslagaccount maken
De eenvoudigste manier om uw eerste Azure-opslagaccount te maken, is met behulp van de Azure Portal. Zie Een opslagaccount maken voor meer informatie.
U kunt ook een Azure-opslagaccount maken met behulp van Azure PowerShell, Azure CLI of de Azure Storage Resource Provider voor .NET.
Als u op dit moment liever geen opslagaccount in Azure maakt, kunt u de Azurite-opslagemulator ook gebruiken om uw code uit te voeren en te testen in een lokale omgeving. Zie Use the Azurite emulator for local Azure Storage development (De Azurite-emulator gebruiken voor lokale Azure Storage-ontwikkeling) voor meer informatie.
Een Node.js-toepassing maken
Als u een lege Node.js-toepassing wilt maken, raadpleegt u Een Node.js web-app maken in Azure App Service, een Node.js-toepassing bouwen en implementeren in Azure Cloud Services met behulp van PowerShell of Visual Studio Code.
Uw toepassing configureren voor toegang tot opslag
De Azure Storage-clientbibliotheek voor JavaScript bevat een set gemaksbibliotheken die communiceren met de rest-services voor opslag.
Node-pakketbeheer (npm) gebruiken om het pakket te verkrijgen
Gebruik een opdrachtregelinterface zoals PowerShell (Windows), Terminal (Mac) of Bash (Unix) en navigeer naar de map waarin u de voorbeeldtoepassing hebt gemaakt.
Typ
npm install @azure/storage-queue
in het opdrachtvenster.Controleer of er een
node_modules
map is gemaakt. In die map vindt u het@azure/storage-queue
pakket, dat de clientbibliotheek bevat die u nodig hebt voor toegang tot de opslag.
Het pakket importeren
Voeg met behulp van de code-editor het volgende toe bovenaan het JavaScript-bestand waarin u wachtrijen wilt gebruiken.
const { QueueClient, QueueServiceClient } = require("@azure/storage-queue");
Een wachtrij maken
Met de volgende code wordt de waarde opgehaald van een omgevingsvariabele met de naam AZURE_STORAGE_CONNECTION_STRING
en wordt deze gebruikt om een QueueServiceClient
-object te maken. Dit object wordt vervolgens gebruikt om een QueueClient
object te maken waarmee u met een specifieke wachtrij kunt werken.
// Retrieve the connection from an environment
// variable called AZURE_STORAGE_CONNECTION_STRING
const connectionString = process.env.AZURE_STORAGE_CONNECTION_STRING;
// Create a unique name for the queue
const queueName = "myqueue-" + Date.now().toString();
console.log("Creating queue: ", queueName);
// Instantiate a QueueServiceClient which will be used
// to create a QueueClient and to list all the queues
const queueServiceClient = QueueServiceClient.fromConnectionString(connectionString);
// Get a QueueClient which will be used
// to create and manipulate a queue
const queueClient = queueServiceClient.getQueueClient(queueName);
// Create the queue
await queueClient.create();
Als de wachtrij al bestaat, wordt er een uitzondering gegenereerd.
Het bericht opmaken
Het berichttype is een tekenreeks. Alle berichten worden behandeld als tekenreeksen. Als u een ander gegevenstype wilt verzenden, moet u dat gegevenstype bij het verzenden van het bericht serialiseren in een tekenreeks en de tekenreeksindeling deserialiseren bij het lezen van het bericht.
Gebruik de volgende helperfuncties om JSON te converteren naar een tekenreeksindeling en weer terug in Node.js:
function jsonToBase64(jsonObj) {
const jsonString = JSON.stringify(jsonObj)
return Buffer.from(jsonString).toString('base64')
}
function encodeBase64ToJson(base64String) {
const jsonString = Buffer.from(base64String,'base64').toString()
return JSON.parse(jsonString)
}
Een bericht invoegen in een wachtrij
Als u een bericht aan een wachtrij wilt toevoegen, roept u de sendMessage
methode aan.
messageText = "Hello, World";
console.log("Adding message to the queue: ", messageText);
// Add a message to the queue
await queueClient.sendMessage(messageText);
Het volgende bericht bekijken
U kunt berichten in de wachtrij bekijken zonder ze uit de wachtrij te verwijderen door de peekMessages
methode aan te roepen.
Bekijkt standaard peekMessages
één bericht. In het volgende voorbeeld ziet u de eerste vijf berichten in de wachtrij. Als er minder dan vijf berichten zichtbaar zijn, worden alleen de zichtbare berichten geretourneerd.
// Peek at messages in the queue
const peekedMessages = await queueClient.peekMessages({ numberOfMessages: 5 });
for (i = 0; i < peekedMessages.peekedMessageItems.length; i++) {
// Display the peeked message
console.log("Peeked message: ", peekedMessages.peekedMessageItems[i].messageText);
}
Als u aanroept peekMessages
wanneer er geen berichten in de wachtrij staan, wordt er geen fout geretourneerd. Er worden echter geen berichten geretourneerd.
De inhoud van een bericht in de wachtrij wijzigen
In het volgende voorbeeld wordt de tekst van een bericht bijgewerkt.
Wijzig de inhoud van een bericht in de wachtrij door aan te roepen updateMessage
.
// Get the first message in the queue
var receivedMessages = await queueClient.receiveMessages();
const firstMessage = receivedMessages.receivedMessageItems[0];
// Update the received message
await queueClient.updateMessage(
firstMessage.messageId,
firstMessage.popReceipt,
"This message has been updated"
);
Een bericht uit de wachtrij verwijderen
Het uit de wachtrij plaatsen van een bericht bestaat uit twee fasen:
Haal het bericht op.
Verwijder het bericht.
In het volgende voorbeeld wordt een bericht ophaalt en vervolgens verwijderd.
Roep de receiveMessages
methode aan om een bericht op te halen. Deze aanroep maakt de berichten onzichtbaar in de wachtrij, zodat andere clients ze niet kunnen verwerken. Zodra uw toepassing een bericht heeft verwerkt, roept deleteMessage
u aan om het uit de wachtrij te verwijderen.
// Get next message from the queue
receivedMessages = await queueClient.receiveMessages();
var message = receivedMessages.receivedMessageItems[0];
console.log("Dequeuing message: ", message.messageText);
await queueClient.deleteMessage(message.messageId, message.popReceipt);
Standaard wordt een bericht slechts 30 seconden verborgen. Na 30 seconden is het zichtbaar voor andere clients. U kunt een andere waarde opgeven door in te stellen options.visibilityTimeout
wanneer u aanroept receiveMessages
.
Als u aanroept receiveMessages
wanneer er geen berichten in de wachtrij staan, wordt er geen fout geretourneerd. Er worden echter geen berichten geretourneerd.
Aanvullende opties voor het verwijderen van berichten
Er zijn twee manieren waarop u het ophalen van berichten uit een wachtrij kunt aanpassen:
-
options.numberOfMessages
: Haal een batch berichten op (maximaal 32). -
options.visibilityTimeout
: stel een langere of kortere time-out voor onzichtbaarheid in.
In het volgende voorbeeld wordt de receiveMessages
methode gebruikt om vijf berichten in één aanroep op te halen. Vervolgens wordt elk bericht verwerkt met behulp van een for
lus. Ook wordt de time-out voor onzichtbaarheid ingesteld op vijf minuten voor alle berichten die met deze methode worden geretourneerd.
// Get up to 5 messages from the queue
const receivedMsgsResp = await queueClient.receiveMessages({ numberOfMessages: 5, visibilityTimeout: 5 * 60 });
for (i = 0; i < receivedMsgsResp.receivedMessageItems.length; i++)
{
message = receivedMsgsResp.receivedMessageItems[i];
console.log("Dequeuing message: ", message.messageText);
await queueClient.deleteMessage(message.messageId, message.popReceipt);
}
De wachtrijlengte ophalen
De getProperties
methode retourneert metagegevens over de wachtrij, inclusief het geschatte aantal berichten dat in de wachtrij wacht.
const properties = await queueClient.getProperties();
console.log("Approximate queue length: ", properties.approximateMessagesCount);
Wachtrijen weergeven
Als u een lijst met wachtrijen wilt ophalen, roept u QueueServiceClient.listQueues
aan. Als u een lijst wilt ophalen die is gefilterd op een specifiek voorvoegsel, stelt u options.prefix in uw aanroep in op listQueues
.
for await (const item of queueServiceClient.listQueues()) {
console.log("Queue: ", item.name);
}
Een wachtrij verwijderen
Als u een wachtrij en alle berichten in de wachtrij wilt verwijderen, roept u de DeleteQueue
methode aan op het QueueClient
-object.
// Delete the queue
console.log("Deleting queue: ", queueClient.name);
await queueClient.delete();
Als u alle berichten uit een wachtrij wilt wissen zonder deze te verwijderen, roept u ClearMessages
aan.
Tip
Bekijk de opslagplaats met codevoorbeelden van Azure Storage
Raadpleeg onze lijst met Azure Storage-voorbeelden voor eenvoudig te gebruiken end-to-end Azure Storage-codevoorbeelden die u kunt downloaden en uitvoeren.
Volgende stappen
Nu u de basisbeginselen van Queue Storage hebt geleerd, volgt u deze koppelingen voor meer informatie over complexere opslagtaken.
- Ga naar de blog van het Azure Storage-team voor meer informatie over wat er nieuw is
- Ga naar de Azure Storage-clientbibliotheek voor JavaScript-opslagplaats op GitHub