Aracılığıyla paylaş


Node.js'den Azure Kuyruk Depolama'yı kullanma

Genel Bakış

Bu kılavuzda, Azure Kuyruk Depolama kullanarak yaygın senaryoları nasıl gerçekleştirdiğiniz gösterilmektedir. Örnekler Node.js API kullanılarak yazılır. Kapsanan senaryolar arasında kuyruk iletilerini ekleme, göz atma, alma ve silme sayılabilir. Ayrıca kuyrukları oluşturmayı ve silmeyi de öğrenin.

Kuyruk depolama nedir?

Azure Kuyruk depolama, HTTP veya HTTPS kullanan kimlik doğrulaması yapılmış çağrılar aracılığıyla dünyanın her yerinden erişilebilen çok sayıda iletinin depolanması için bir hizmettir. Tek bir kuyruk iletisinin boyutu 64 KB’ye kadar olabilir ve bir kuyrukta, depolama hesabının toplam kapasite sınırına kadar milyonlarca ileti bulunabilir. Kuyruk depolama genellikle zaman uyumsuz olarak işlenmek üzere bir iş kapsamı oluşturmak için kullanılır.

Kuyruk hizmeti kavramları

Azure Kuyruk hizmeti aşağıdaki bileşenleri içerir:

Azure Kuyruk hizmeti bileşenleri

  • Depolama Hesabı: Azure Depolama'ya tüm erişim bir depolama hesabı aracılığıyla gerçekleştirilir. Depolama hesapları hakkında daha fazla bilgi için bkz . Depolama hesabına genel bakış.

  • Kuyruk: Kuyrukta bir dizi ileti vardır. Tüm iletiler bir kuyrukta olmalıdır. Kuyruk adının tamamen küçük harfli olması gerektiğini unutmayın. Kuyrukların adlandırılması hakkında daha fazla bilgi için bkz. Kuyrukları ve Meta Verileri Adlandırma.

  • İleti: İleti, biçimi ne olursa olsun en çok 64 KB büyüklüktedir. Bir iletinin kuyrukta kalabileceği en uzun süre 7 gündür. Sürüm 2017-07-29 veya üzeri için, yaşam süresi üst sınırı herhangi bir pozitif sayı veya iletinin süresinin dolmadığını belirten -1 olabilir. Bu parametre atlanırsa, varsayılan yaşam süresi yedi gündür.

  • URL biçimi: Kuyruklar şu URL biçimi kullanılarak adreslenebilir: http://<storage account>.queue.core.windows.net/<queue>

    Aşağıdaki URL diyagramdaki bir kuyruğun adresini belirtir:

    http://myaccount.queue.core.windows.net/incoming-orders

Azure depolama hesabı oluşturma

İlk Azure depolama hesabınızı oluşturmanın en kolay yolu Azure Portalı’nı kullanmaktır. Daha fazla bilgi için bkz. Depolama hesabı oluşturma.

Azure PowerShell, Azure CLI veya .NET için Azure Depolama Kaynak Sağlayıcısı’nı da kullanarak Azure depolama hesabı oluşturabilirsiniz.

Şu anda Azure'da depolama hesabı oluşturmamayı tercih ediyorsanız, kodunuzu yerel bir ortamda çalıştırmak ve test etmek için Azurite depolama öykünücüsü de kullanabilirsiniz. Daha fazla bilgi için bkz . Yerel Azure Depolama geliştirmesi için Azurite öykünücüsü kullanma.

Node.js uygulaması oluşturma

Boş bir Node.js uygulaması oluşturmak için bkz. Azure App Service'da Node.js web uygulaması oluşturma, PowerShell veya Visual Studio Code kullanarak Node.js bir uygulama derleme ve Azure Cloud Services dağıtma.

Uygulamanızı depolamaya erişecek şekilde yapılandırma

JavaScript için Azure Depolama istemci kitaplığı, depolama REST hizmetleriyle iletişim kuran bir dizi kolaylık kitaplığı içerir.

Paketi almak için Node paket yöneticisini (npm) kullanma

  1. PowerShell (Windows), Terminal (Mac) veya Bash (Unix) gibi bir komut satırı arabirimi kullanın, örnek uygulamanızı oluşturduğunuz klasöre gidin.

  2. Komut penceresine yazın npm install @azure/storage-queue .

  3. Bir node_modules klasörün oluşturulduğunu doğrulayın. Bu klasörün içinde depolama alanına @azure/storage-queue erişmek için ihtiyacınız olan istemci kitaplığını içeren paketi bulacaksınız.

Paketi içeri aktarma

Kod düzenleyicinizi kullanarak kuyrukları kullanmayı düşündüğünüz JavaScript dosyasının en üstüne aşağıdakileri ekleyin.

const { QueueClient, QueueServiceClient } = require("@azure/storage-queue");

Kuyruk oluşturma

Aşağıdaki kod adlı AZURE_STORAGE_CONNECTION_STRING bir ortam değişkeninin değerini alır ve bunu kullanarak bir QueueServiceClient nesne oluşturur. Daha sonra bu nesne, belirli bir kuyrukla çalışmanızı sağlayan bir QueueClient nesne oluşturmak için kullanılır.

// 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();

Kuyruk zaten varsa, bir özel durum oluşturulur.

İletiyi biçimlendirme

İleti türü bir dizedir. Tüm iletiler dize olarak kabul edilir. Farklı bir veri türü göndermeniz gerekiyorsa, iletiyi gönderirken bu veri türünü bir dizede seri hale getirmeniz ve iletiyi okurken dize biçimini seri durumdan çıkarmanız gerekir.

JSON'yi dize biçimine dönüştürmek ve Node.js'da yeniden kullanmak için aşağıdaki yardımcı işlevleri kullanın:

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

Kuyruğa ileti ekleme

Kuyruğa ileti eklemek için yöntemini çağırın sendMessage .

messageText = "Hello, World";
console.log("Adding message to the queue: ", messageText);

// Add a message to the queue
await queueClient.sendMessage(messageText);

Sonraki iletiye göz atma

yöntemini çağırarak peekMessages kuyruktaki iletilere kuyruktan kaldırmadan göz atabilirsiniz.

Varsayılan olarak, peekMessages tek bir iletiye göz atarak. Aşağıdaki örnek, kuyruktaki ilk beş iletiye göz attırıyor. Beşten az ileti görünür durumdaysa yalnızca görünen iletiler döndürülür.

// 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);
}

Kuyrukta ileti olmadığında çağrılması peekMessages hata döndürmez. Ancak, hiçbir ileti döndürülmedi.

Kuyruğa alınan iletinin içeriğini değiştirme

Aşağıdaki örnek bir iletinin metnini güncelleştirir.

çağrısı updateMessageyaparak kuyruktaki bir iletinin içeriğini yerinde değiştirin.

// 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"
);

İletiyi sıralama

İletiyi sıralamak iki aşamalı bir işlemdir:

  1. mesajı alın.

  2. İletiyi silin.

Aşağıdaki örnek bir ileti alır ve bunu siler.

İleti almak için yöntemini çağırın receiveMessages . Bu çağrı, iletileri kuyrukta görünmez hale getirir, böylece başka hiçbir istemci bunları işleyemez. Uygulamanız bir iletiyi işledikten sonra, kuyruktan silmek için çağrısında deleteMessage bulunur.

// 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);

Varsayılan olarak, bir ileti yalnızca 30 saniye gizlenir. 30 saniye sonra diğer istemciler tarafından görülebilir. çağrısı receiveMessagesyaptığınızda ayarlayarak options.visibilityTimeout farklı bir değer belirtebilirsiniz.

Kuyrukta ileti olmadığında çağrılması receiveMessages hata döndürmez. Ancak, hiçbir ileti döndürülmeyecek.

İletileri sıralamak için ek seçenekler

Kuyruktan ileti almayı özelleştirmenin iki yolu vardır:

Aşağıdaki örnek, bir çağrıda receiveMessages beş ileti almak için yöntemini kullanır. Ardından her iletiyi bir for döngü kullanarak işler. Ayrıca bu yöntem tarafından döndürülen tüm iletiler için görünmezlik zaman aşımını beş dakikaya ayarlar.

// 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);
}

Kuyruk uzunluğunu alma

getProperties yöntemi, kuyrukta bekleyen yaklaşık ileti sayısı da dahil olmak üzere kuyruk hakkındaki meta verileri döndürür.

const properties = await queueClient.getProperties();
console.log("Approximate queue length: ", properties.approximateMessagesCount);

Kuyrukları listeleme

Kuyrukların listesini almak için öğesini çağırın QueueServiceClient.listQueues. Belirli bir önek tarafından filtrelenmiş bir listeyi almak için, çağrınızda options.prefix değerini olarak listQueuesayarlayın.

for await (const item of queueServiceClient.listQueues()) {
  console.log("Queue: ", item.name);
}

Kuyruk silme

Bir kuyruğu ve içindeki tüm iletileri silmek için nesnesinde DeleteQueue yöntemini çağırın QueueClient .

// Delete the queue
console.log("Deleting queue: ", queueClient.name);
await queueClient.delete();

Bir kuyruktan silmeden tüm iletileri temizlemek için çağrısında bulunur ClearMessages.

İpucu

Azure Depolama kod örnekleri havuzuna göz atın

İndirip çalıştırabileceğiniz kullanımı kolay uçtan uca Azure Depolama kod örnekleri lütfen Azure Depolama Örnekleri listemize bakın.

Sonraki adımlar

Kuyruk Depolama'nın temellerini öğrendiğinize göre, daha karmaşık depolama görevleri hakkında bilgi edinmek için bu bağlantıları izleyin.