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:
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
PowerShell (Windows), Terminal (Mac) veya Bash (Unix) gibi bir komut satırı arabirimi kullanın, örnek uygulamanızı oluşturduğunuz klasöre gidin.
Komut penceresine yazın
npm install @azure/storage-queue
.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ı updateMessage
yaparak 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:
mesajı alın.
İ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ı receiveMessages
yaptığı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:
-
options.numberOfMessages
: Bir grup ileti alın (en fazla 32). -
options.visibilityTimeout
: Daha uzun veya daha kısa bir görünmezlik zaman aşımı ayarlayın.
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 listQueues
ayarlayı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.
- Yenilikler hakkında bilgi edinmek için Azure Depolama ekibi blogunu ziyaret edin
- GitHub'da JavaScript deposu için Azure Depolama istemci kitaplığını ziyaret edin