Megosztás a következőn keresztül:


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:

Az Azure Queue szolgáltatás összetevői

  • 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)

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

  2. Írja be npm install @azure/storage-queue a parancsablakba.

  3. 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 updateMessagea 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:

  1. Kérje le az üzenetet.

  2. 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 receiveMessagesmegadhat 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:

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.