C++’tan Kuyruk Depolama kullanma
İpucu
Microsoft Azure Depolama Gezgini’ni deneyin
Microsoft Azure Depolama Gezgini, Microsoft’un Windows, macOS ve Linux üzerinde Azure Depolama verileriyle görsel olarak çalışmanızı sağlayan ücretsiz ve tek başına uygulamasıdır.
Genel Bakış
Bu kılavuz, Azure Kuyruk Depolama hizmetini kullanarak yaygın senaryoları nasıl gerçekleştirebileceğinizi gösterir. Örnekler C++ dilinde yazılır ve C++ için Azure Depolama istemci kitaplığını kullanır. Kapsanan senaryolar arasında kuyruk iletilerini ekleme, göz atma, alma ve silmenin yanı sıra kuyruk oluşturma ve silme sayılabilir.
Not
Bu kılavuz, C++ v1.0.0 ve üzeri için Azure Depolama istemci kitaplığını hedefler. Önerilen sürüm, NuGet veya GitHub aracılığıyla kullanılabilen Azure Depolama istemci kitaplığı v2.2.0'dır.
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.
C++ uygulaması oluşturma
Bu kılavuzda, bir C++ uygulaması içinde çalıştırılabilir depolama özelliklerini kullanacaksınız.
Bunu yapmak için C++ için Azure Depolama istemci kitaplığını yüklemeniz ve Azure aboneliğinizde bir Azure Depolama hesabı oluşturmanız gerekir.
C++ için Azure Depolama istemci kitaplığını yüklemek için aşağıdaki yöntemleri kullanabilirsiniz:
- Linux:C++ BENİOKU için Azure Depolama istemci kitaplığında verilen yönergeleri izleyin: Linux'ta Çalışmaya Başlama sayfası.
-
Windows: Windows'da bağımlılık yöneticisi olarak vcpkg kullanın. uygulamasını başlatmak
vcpkg
için hızlı başlangıcı izleyin. Ardından kitaplığı yüklemek için aşağıdaki komutu kullanın:
.\vcpkg.exe install azure-storage-cpp
Kaynak kodu derleme ve NuGet'e aktarma kılavuzunu README dosyasında bulabilirsiniz.
Uygulamanızı Kuyruk Depolama'ya erişecek şekilde yapılandırma
Kuyruklara erişmek için Azure Depolama API'lerini kullanmak istediğiniz C++ dosyasının en üstüne aşağıdaki include deyimlerini ekleyin:
#include <was/storage_account.h>
#include <was/queue.h>
Azure Depolama bağlantı dizesini ayarlama
Azure Depolama istemcisi, veri yönetimi hizmetlerine erişmek için uç noktaları ve kimlik bilgilerini depolamak için bir depolama bağlantı dizesi kullanır. bir istemci uygulamasında çalışırken, depolama hesabınızın adını ve ve AccountKey
değerlerinin Azure portal listelenen depolama hesabının depolama erişim anahtarını kullanarak depolama bağlantı dizesini AccountName
aşağıdaki biçimde sağlamanız gerekir. Depolama hesapları ve erişim anahtarları hakkında bilgi için bkz. Azure Depolama hesapları hakkında. Bu örnekte bağlantı dizesini tutmak için nasıl statik bir alan bildirebileceğiniz gösterilmektedir:
// Define the connection-string with your values.
const utility::string_t storage_connection_string(U("DefaultEndpointsProtocol=https;AccountName=your_storage_account;AccountKey=your_storage_account_key"));
Uygulamanızı yerel Windows bilgisayarınızda test etmek için Azurite depolama öykünücüsü kullanabilirsiniz. Azurite, yerel geliştirme makinenizde Azure Blob Depolama ve Kuyruk Depolama benzetimini sağlayan bir yardımcı programdır. Aşağıdaki örnekte bağlantı dizesini yerel depolama öykünücünüzde tutmak için nasıl statik bir alan bildirebileceğiniz gösterilmektedir:
// Define the connection-string with Azurite.
const utility::string_t storage_connection_string(U("UseDevelopmentStorage=true;"));
Azurite'yi başlatmak için bkz. Yerel Azure Depolama geliştirmesi için Azurite öykünücüsü kullanma.
Aşağıdaki örnekler, depolama bağlantı dizesini almak için bu iki yöntemden birini kullandığınızı varsayar.
Bağlantı dizenizi alma
depolama hesabı bilgilerinizi göstermek için sınıfını kullanabilirsiniz cloud_storage_account
. Depolama hesabı bilgilerinizi depolama bağlantı dizesinden almak için yöntemini kullanabilirsiniz parse
.
// Retrieve storage account from connection string.
azure::storage::cloud_storage_account storage_account = azure::storage::cloud_storage_account::parse(storage_connection_string);
Nasıl yapılır: Kuyruk oluşturma
Nesne cloud_queue_client
, kuyruklar için başvuru nesneleri almanıza olanak tanır. Aşağıdaki kod bir cloud_queue_client
nesnesi oluşturur.
// Retrieve storage account from connection string.
azure::storage::cloud_storage_account storage_account = azure::storage::cloud_storage_account::parse(storage_connection_string);
// Create a queue client.
azure::storage::cloud_queue_client queue_client = storage_account.create_cloud_queue_client();
cloud_queue_client
Kullanmak istediğiniz kuyruğa başvuru almak için nesnesini kullanın. Kuyruk yoksa oluşturabilirsiniz.
// Retrieve a reference to a queue.
azure::storage::cloud_queue queue = queue_client.get_queue_reference(U("my-sample-queue"));
// Create the queue if it doesn't already exist.
queue.create_if_not_exists();
Nasıl yapılır: Kuyruğa ileti ekleme
Var olan kuyruğa ileti eklemek için önce yeni cloud_queue_message
bir oluşturun. Ardından yöntemini çağırın add_message
. bir cloud_queue_message
dizeden (UTF-8 biçiminde) veya bayt dizisinden oluşturulabilir. Burada bir kuyruk oluşturan (yoksa) ve iletisini Hello, World
ekleyen kod yer alır:
// Retrieve storage account from connection-string.
azure::storage::cloud_storage_account storage_account = azure::storage::cloud_storage_account::parse(storage_connection_string);
// Create the queue client.
azure::storage::cloud_queue_client queue_client = storage_account.create_cloud_queue_client();
// Retrieve a reference to a queue.
azure::storage::cloud_queue queue = queue_client.get_queue_reference(U("my-sample-queue"));
// Create the queue if it doesn't already exist.
queue.create_if_not_exists();
// Create a message and add it to the queue.
azure::storage::cloud_queue_message message1(U("Hello, World"));
queue.add_message(message1);
Nasıl yapılır: Sonraki iletiye göz atma
yöntemini çağırarak kuyruktan kaldırmadan kuyruğun önündeki iletiye peek_message
göz atabilirsiniz.
// Retrieve storage account from connection-string.
azure::storage::cloud_storage_account storage_account = azure::storage::cloud_storage_account::parse(storage_connection_string);
// Create the queue client.
azure::storage::cloud_queue_client queue_client = storage_account.create_cloud_queue_client();
// Retrieve a reference to a queue.
azure::storage::cloud_queue queue = queue_client.get_queue_reference(U("my-sample-queue"));
// Peek at the next message.
azure::storage::cloud_queue_message peeked_message = queue.peek_message();
// Output the message content.
std::wcout << U("Peeked message content: ") << peeked_message.content_as_string() << std::endl;
Nasıl yapılır: Kuyruğa alınan iletinin içeriğini değiştirme
Kuyrukta yer alan bir iletinin içeriğini değiştirebilirsiniz. Eğer ileti bir iş görevini temsil ediyorsa, bu özelliği kullanarak iş görevinin durumunu güncelleştirebilirsiniz. Aşağıdaki kod kuyruk iletisini yeni içeriklerle güncelleştirir ve görünürlük zaman aşımını 60 saniye daha uzatır. Bu, ileti ile ilişkili işin durumunu kaydeder ve istemciye ileti üzerinde çalışmaya devam etmesi için bir dakika daha zaman verir. Bu tekniği, bir işleme adımı donanım veya yazılım hatası nedeniyle başarısız olursa baştan başlamak zorunda kalmadan kuyruk iletilerinde çok adımlı iş akışlarını izlemek için kullanabilirsiniz. Genellikle bir yeniden deneme sayacı tutmanı gerekir ve bir ileti n seferden daha fazla yeniden denenirse, silebilirsiniz. Bu, her işlendiğinde bir uygulama hatası tetikleyen bir iletiye karşı koruma sağlar.
// Retrieve storage account from connection-string.
azure::storage::cloud_storage_account storage_account = azure::storage::cloud_storage_account::parse(storage_connection_string);
// Create the queue client.
azure::storage::cloud_queue_client queue_client = storage_account.create_cloud_queue_client();
// Retrieve a reference to a queue.
azure::storage::cloud_queue queue = queue_client.get_queue_reference(U("my-sample-queue"));
// Get the message from the queue and update the message contents.
// The visibility timeout "0" means make it visible immediately.
// The visibility timeout "60" means the client can get another minute to continue
// working on the message.
azure::storage::cloud_queue_message changed_message = queue.get_message();
changed_message.set_content(U("Changed message"));
queue.update_message(changed_message, std::chrono::seconds(60), true);
// Output the message content.
std::wcout << U("Changed message content: ") << changed_message.content_as_string() << std::endl;
Nasıl yapılır: Sonraki iletiyi sıralama
Kodunuz iki adımda kuyruktaki bir iletiyi sıralar. çağrısı get_message
yaptığınızda kuyruktaki bir sonraki iletiyi alırsınız. tarafından get_message
döndürülen bir ileti, bu kuyruktan gelen iletileri okuyan diğer kodlar için görünmez hale gelir. kuyruktan iletiyi kaldırmayı tamamlamak için çağrısı da delete_message
gerekir. Bir iletinin iki adımlı kaldırılma süreci, donanım veya yazılım arızasından dolayı kodunuzun bir iletiyi işleyememesi durumunda kodunuzun başka bir örneğinin aynı iletiyi alıp yeniden denemesini sağlar. kodunuz, ileti işlendikten hemen sonra çağrır delete_message
.
// Retrieve storage account from connection-string.
azure::storage::cloud_storage_account storage_account = azure::storage::cloud_storage_account::parse(storage_connection_string);
// Create the queue client.
azure::storage::cloud_queue_client queue_client = storage_account.create_cloud_queue_client();
// Retrieve a reference to a queue.
azure::storage::cloud_queue queue = queue_client.get_queue_reference(U("my-sample-queue"));
// Get the next message.
azure::storage::cloud_queue_message dequeued_message = queue.get_message();
std::wcout << U("Dequeued message: ") << dequeued_message.content_as_string() << std::endl;
// Delete the message.
queue.delete_message(dequeued_message);
Nasıl yapılır: İletileri sıralamak için ek seçenekleri kullanma
İletilerin bir kuyruktan alınma şeklini iki yöntemle özelleştirebilirsiniz. İlk olarak toplu iletiler alabilirsiniz (en fazla 32). İkinci olarak daha uzun veya daha kısa bir görünmezlik süresi ayarlayarak kodunuzun her iletiyi tamamen işlemesi için daha az veya daha fazla zaman tanıyabilirsiniz. Aşağıdaki kod örneği, tek bir çağrıda get_messages
20 ileti almak için yöntemini kullanır. Ardından her iletiyi bir for
döngü kullanarak işler. Ayrıca her ileti için görünmezlik zaman aşımı beş dakika olarak ayarlanır. Beş dakikanın tüm iletiler için aynı anda başladığını, bu nedenle çağrısının get_messages
üzerinden beş dakika geçtikten sonra silinmemiş tüm iletilerin yeniden görünür olacağını unutmayın.
// Retrieve storage account from connection-string.
azure::storage::cloud_storage_account storage_account = azure::storage::cloud_storage_account::parse(storage_connection_string);
// Create the queue client.
azure::storage::cloud_queue_client queue_client = storage_account.create_cloud_queue_client();
// Retrieve a reference to a queue.
azure::storage::cloud_queue queue = queue_client.get_queue_reference(U("my-sample-queue"));
// Dequeue some queue messages (maximum 32 at a time) and set their visibility timeout to
// 5 minutes (300 seconds).
azure::storage::queue_request_options options;
azure::storage::operation_context context;
// Retrieve 20 messages from the queue with a visibility timeout of 300 seconds.
std::vector<azure::storage::cloud_queue_message> messages = queue.get_messages(20, std::chrono::seconds(300), options, context);
for (auto it = messages.cbegin(); it != messages.cend(); ++it)
{
// Display the contents of the message.
std::wcout << U("Get: ") << it->content_as_string() << std::endl;
}
Nasıl yapılır: Kuyruk uzunluğunu alma
Bir kuyruktaki ileti sayısı ile ilgili bir tahmin alabilirsiniz. yöntemi, download_attributes
ileti sayısı da dahil olmak üzere kuyruk özelliklerini döndürür. yöntemi, approximate_message_count
kuyruktaki yaklaşık ileti sayısını alır.
// Retrieve storage account from connection-string.
azure::storage::cloud_storage_account storage_account = azure::storage::cloud_storage_account::parse(storage_connection_string);
// Create the queue client.
azure::storage::cloud_queue_client queue_client = storage_account.create_cloud_queue_client();
// Retrieve a reference to a queue.
azure::storage::cloud_queue queue = queue_client.get_queue_reference(U("my-sample-queue"));
// Fetch the queue attributes.
queue.download_attributes();
// Retrieve the cached approximate message count.
int cachedMessageCount = queue.approximate_message_count();
// Display number of messages.
std::wcout << U("Number of messages in queue: ") << cachedMessageCount << std::endl;
Nasıl yapılır: Kuyruk silme
Bir kuyruğu ve içindeki tüm iletileri silmek için kuyruk nesnesinde yöntemini çağırın delete_queue_if_exists
.
// Retrieve storage account from connection-string.
azure::storage::cloud_storage_account storage_account = azure::storage::cloud_storage_account::parse(storage_connection_string);
// Create the queue client.
azure::storage::cloud_queue_client queue_client = storage_account.create_cloud_queue_client();
// Retrieve a reference to a queue.
azure::storage::cloud_queue queue = queue_client.get_queue_reference(U("my-sample-queue"));
// If the queue exists and delete it.
queue.delete_queue_if_exists();
Sonraki adımlar
Artık Kuyruk Depolama'nın temellerini öğrendiğinize göre, Azure Depolama hakkında daha fazla bilgi edinmek için bu bağlantıları izleyin.