Az Azure Queue Storage használata Node.js
Áttekintés
Ez az útmutató bemutatja, hogyan hajthat végre gyakori forgatókönyveket az Azure Queue Storage használatával. A minták írása a Node.js API használatával történik. A tárgyalt forgatókönyvek közé tartozik az üzenetsor-üzenetek beszúrása, betekintése, lekérése és törlése. Megtudhatja, hogyan hozhat létre és törölhet üzenetsorokat.
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. Az üzenetsortárat gyakran használják az aszinkron feldolgozáshoz szükséges munka hátralékának létrehozására.
Üzenetsor-szolgáltatás fogalmai
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 ez a paraméter nincs megadva, az alapértelmezett élettartam hét nap.
URL-cím formátuma: Az üzenetsorok a következő URL-címformátummal 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 a 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.
Node.js alkalmazás létrehozása
Üres Node.js alkalmazás létrehozásához lásd: Node.js-webalkalmazás létrehozása Azure App Service, Node.js-alkalmazás létrehozása és üzembe helyezése az Azure Cloud Services a PowerShell vagy a Visual Studio Code használatával.
Az alkalmazás konfigurálása a tárterület eléréséhez
A JavaScripthez készült Azure Storage-ügyfélkódtár kényelmi kódtárakat tartalmaz, amelyek kommunikálnak a storage REST-szolgáltatásokkal.
A csomag beszerzéséhez használja a Node-csomagkezelőt (npm)
Használjon olyan parancssori felületet, mint a PowerShell (Windows), a Terminál (Mac) vagy a Bash (Unix), lépjen arra a mappára, ahol létrehozta a mintaalkalmazást.
Írja be
npm install @azure/storage-queue
a parancsablakba.Ellenőrizze, hogy létre lett-e hozva egy
node_modules
mappa. Ebben a mappában található a@azure/storage-queue
csomag, amely tartalmazza a tároló eléréséhez szükséges ügyfélkódtárat.
A csomag importálása
A kódszerkesztővel adja hozzá az alábbiakat a JavaScript-fájl tetejére, ahol üzenetsorokat szeretne használni.
const { QueueClient, QueueServiceClient } = require("@azure/storage-queue");
Üzenetsor létrehozása
Az alábbi kód lekéri egy nevű AZURE_STORAGE_CONNECTION_STRING
környezeti változó értékét, és azt használja egy QueueServiceClient
objektum létrehozásához. Ez az objektum ezután egy QueueClient
objektum létrehozására szolgál, amely lehetővé teszi egy adott üzenetsor használatát.
// 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();
Ha az üzenetsor már létezik, a rendszer kivételt jelez.
Az üzenet formázása
Az üzenet típusa egy sztring. A rendszer minden üzenetet sztringként kezel. Ha más adattípust kell elküldenie, akkor az üzenet elküldésekor szerializálnia kell az adattípust egy sztringben, és deszerializálnia kell a sztringformátumot az üzenet olvasásakor.
Ha a JSON-t sztringformátummá szeretné konvertálni, majd újra Node.js, használja az alábbi segédfüggvényeket:
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)
}
Üzenet beszúrása üzenetsorba
Ha üzenetet szeretne hozzáadni egy üzenetsorhoz, hívja meg a metódust sendMessage
.
messageText = "Hello, World";
console.log("Adding message to the queue: ", messageText);
// Add a message to the queue
await queueClient.sendMessage(messageText);
Betekintés a következő üzenetbe
Az üzenetsor üzeneteibe anélkül is betekinthet, hogy eltávolítaná őket az üzenetsorból a peekMessages
metódus meghívásával.
Alapértelmezés szerint peekMessages
egyetlen üzenetre néz. Az alábbi példa betekint az üzenetsor első öt üzenetére. Ha ötnél kevesebb üzenet látható, a rendszer csak a látható üzeneteket adja vissza.
// 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);
}
Ha az üzenetsor nem tartalmaz üzeneteket, a hívás peekMessages
nem ad vissza hibát. A rendszer azonban nem ad vissza üzeneteket.
Üzenetsor tartalmának módosítása
Az alábbi példa frissíti egy üzenet szövegét.
Az üzenetsoron belüli üzenet tartalmának módosításához hívja meg updateMessage
a következőt: .
// 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"
);
Üzenet törlése
Az üzenet törlése kétfázisú folyamat:
Kérje le az üzenetet.
Törölje az üzenetet.
Az alábbi példa lekéri az üzenetet, majd törli azt.
Üzenet lekéréséhez hívja meg a metódust receiveMessages
. Ez a hívás láthatatlanná teszi az üzeneteket az üzenetsorban, így más ügyfelek nem tudják feldolgozni őket. Miután az alkalmazás feldolgozta az üzenetet, hívja meg deleteMessage
, hogy törölje azt az üzenetsorból.
// 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);
Alapértelmezés szerint egy üzenet csak 30 másodpercig van elrejtve. 30 másodperc elteltével más ügyfelek számára is látható. A híváskor receiveMessages
megadhat egy másik értéketoptions.visibilityTimeout
.
Ha az üzenetsor nem tartalmaz üzeneteket, a hívás receiveMessages
nem ad vissza hibát. A rendszer azonban nem ad vissza üzeneteket.
További lehetőségek az üzenetek törléséhez
Az üzenetsorokból történő üzenetlekérés kétféleképpen szabható testre:
-
options.numberOfMessages
: Üzenetek kötegének lekérése (legfeljebb 32). -
options.visibilityTimeout
: Állítson be hosszabb vagy rövidebb láthatatlansági időtúllépést.
Az alábbi példa a metódust receiveMessages
használja öt üzenet lekérésére egy hívásban. Ezután az egyes üzeneteket egy for
hurok használatával dolgozza fel. Emellett öt percre állítja a láthatatlanság időtúllépését az ezzel a módszerrel visszaadott összes üzenethez.
// 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);
}
Az üzenetsor hosszának lekérése
A getProperties
metódus metaadatokat ad vissza az üzenetsorról, beleértve az üzenetsorban várakozó üzenetek hozzávetőleges számát.
const properties = await queueClient.getProperties();
console.log("Approximate queue length: ", properties.approximateMessagesCount);
Üzenetsorok listázása
Az üzenetsorok listájának lekéréséhez hívja meg a következőt QueueServiceClient.listQueues
: . Ha egy adott előtaggal szűrt listát szeretne lekérni, állítsa be a options.prefix értéket a hívásban a következőre: listQueues
.
for await (const item of queueServiceClient.listQueues()) {
console.log("Queue: ", item.name);
}
Üzenetsor törlése
Ha törölni szeretne egy üzenetsort és az abban található összes üzenetet, hívja meg az DeleteQueue
objektum metódusát QueueClient
.
// Delete the queue
console.log("Deleting queue: ", queueClient.name);
await queueClient.delete();
Ha törölni szeretné az üzenetsor összes üzenetét törlés nélkül, hívja meg a parancsot ClearMessages
.
Tipp
Az Azure Storage kódmintatár megtekintése
Letölthető és futtatható, könnyen használható teljes körű Azure Storage-kódmintákért tekintse meg az Azure Storage-minták listáját.
Következő lépések
Most, hogy megismerte a Queue Storage alapjait, kövesse ezeket a hivatkozásokat az összetettebb tárolási feladatok megismeréséhez.
- Látogasson el az Azure Storage csapat blogjára , ahol megismerheti az újdonságokat
- Keresse fel az Azure Storage JavaScript-adattárhoz készült ügyfélkódtárát a GitHubon