Windows Azure Queue Storage

Windows Azure 3 ana çekirdekten oluşmaktadır ve bunlar  ComputeStorage ve Fabric. Bu yazıda bahsedeceğimiz Storage büyük ölçekli ihtiyaçlar için ölçülebilir depolama (BlobsTablesQueueDrives) sağlayarak üzerinde odaklanır.

Bir önceki yazıda Service Bus hizmetlerinin 3 temel birimini anlatmıştık. Şimdi ise Windows Azure tarafından sağlanan Queue storage kavramı ile aralarındaki farkları görerek bir demo gerçekleştireceğiz.

azure_patterns1Peki öncelikle Service Bus Queue ile Windows Azure Storage Queue arasında ne gibi farklar bulunmaktadır ve bu ikisini ne zamanlarda kullanmamız gerekmektedir bunu incelemekte fayda var …

Projenizde Windows Azure Storage Queue Kullanmaya karar verdiyseniz ;

  • Mesajlarınız 5GB üzerinde bir değere sahipse ve maksimum 1 hafta ömürlü mesajlar oluşturmak istiyorsanız,
  • Kuyruklar üzerinde yaptığınız işlemlerin, mesajların server tarafında log’lanmasını istiyorsanız
  • Uygulamanız esnasında mesajlarınızı takip etmek işlem durumları ve performansları hakkında akışlarını incelemek istiyorsanız, ki bu durum Worker tarafının uğraması mümkün kilitlenmeler için tedbir amaçlı olarak kullanışlı olacaktır.

Projenizde Windows Azure Service Bus Queue kullanmaya karar verdiyseniz ;

  • Projeniz için Windows Communication Foundation ile tam entegrasyon gerektirmektedir.
  • Mesajlarınızın otomatik yinelenmesini tespit edebilmesini yakalayabilmek için
  • Mesajlarınız 64 KB ve 256 KB sınırları arasında gerçekleşecekse
  • Mesajlarınızın boyutu 5 GB sınırını aşmayacaksa
  • Mesajlarınızın ulaşacağı noktaları yönetebilmek veya istemcilerinizi sınırlamak için bir üyelik sistemine ihtiyaç duyuyorsanız

Yukarıda görüldüğü gibi Service Bus Queue ile Storage Queue arasında bazı farkları sıraladık. Daha önceki uygulamalarda Service Bus hizmetlerine yönelik demolar gerçekleştirdik. Şimdi Storage hizmetinin sunduğu Queue yapısına yönelik Demomuza geçebiliriz.

İlk olarak Windows Azure Storage Account oluşturabilmemiz için Azure Portal üzerinden yeni bir Storage oluşturmamız gerekmektedir.

Capture

Storage oluşturduktan sonra portaldaki işimiz şimdilik bitti. Sırada Visual Studio üzerinden kodlama yapıcağımız kısımda. Bunun için 2 adet Console Application oluşturuyoruz. 1. Console Uygulamamız PRODUCER  2. Console Uygulamamız CONSUMER olacak. ve Azure’da oluşturduğumuz Storage Hesabımızın bize sunduğu key ve Value değerlerini kullanarak konfigürasyon işlemini tamamlıyoruz.

Bunun için Projemiz içerisinde bulunan App.Config sayfası içerisinde bulunan AppSettings tagları arasına gereken değerleri yerleştiriyoruz. Gereken değerler oluşturduğumuz storage hesabında bulunan Manage Access Keys sekmesi altında bize sunuluyor olacaktır.

Capture

Yukarıda göründüğü üzere bize sunulan Storage Account Name ve Primary Access Key alanlarında bulunan değerleri App.Config Dosyası altında bulunan AppSettings Tag’ları arasına aşağıdaki kod bloğundaki şekilde yerleştiriyoruz.

<appSettings>
    <add key="AccountName" value="Account Name Buraya Yazılacak"/>
    <add key="AccountKey" value="Primary Access Key Buraya Yazılacak"/>
</appSettings>

Bu işlemi her iki (Consumer ve Producer) uygulama içerisindeki App.Config Dosyası içerisinde gerçekleştiriyoruz. Bu işlemi gerçekleştirdikten sonra gerekli referans dosyalarının eklenmesi gerekmektedir. Bunun için her iki projenin referans dosyalarına sağ tık  ile Manage Nu Get Packages sekmesini açarak search kısmına windowsazure.storage yazarak gerekli referans dosyasını yüklememiz gerekmektedir.

Capture

Yükleme işlemi tamamlandıktan sonra referanslar kısmına Windows azure işlemleri için gerekli Storage referanslarının eklendiğini görebilirsiniz.

Gerekli konfigürasyonlar tamamlandıktan sonra kodlama işlemine geçebiliriz. Öncelikle Account olarak tanımladığımız değerleri kullanarak gerekli bağlantıyı oluşturmamız gerekmektedir. PRODUCER Uygulaması içerisinde aşağıdaki şekilde kodlarımızı yerleştiriyoruz.

static void Main(string[] args)
        {
            string accountName = ConfigurationManager.AppSettings.Get("AccountName");
            string accountKey = ConfigurationManager.AppSettings.Get("AccountKey");

            var storageCredentials = new StorageCredentials(accountName, accountKey);
            var storageAccount = new CloudStorageAccount(storageCredentials, true);

            var queueClient = storageAccount.CreateCloudQueueClient();
            var queue = queueClient.GetQueueReference("robotcommands");
            queue.CreateIfNotExists();

            string enteredCommand = string.Empty;
            Console.WriteLine("Robot Komut Sistemine Hoşgeldiniz.");

            while (true)
            {
                Console.Write("Gerekli Komutu Giriniz ve Enter Tuşuna basınız:");
                enteredCommand = Console.ReadLine();
                if (enteredCommand != "çıkış")
                {
                    queue.AddMessage(new CloudQueueMessage(enteredCommand));
                    Console.WriteLine("Komut Gönderildi.");
                }
                else
                    break;
            }
        }

CloudStorageAccount storageAccount;

  • Windows Azure management portal üzerindeki oluşturulan storage account işlevinin proje tarafında eşitlenmesi ve doğrulanması görevini görür.

StorageCredentials storageCredentials;

  • Azure managament portal üzerinde oluşturulan storage account ile otantikasyon yapılandırılmasını üstlenir ve bağlantı kurulumu üzerinde görev yapar.

CloudQueueClient queueClient;

  • İstemci tarafında sunulacak olan queue servisini mantıksal olarak oluşturmak için kullanılır. Bu yapı ile queue servisinin yapılandırması ve execute edilmesi sağlanmaktadır.

Producer uygulamasında Storage Account üzerinde gönderdiğimiz mesajların tutulmasını sağladık şimdi gönderdiğimiz bu mesajların Consumer uygulaması tarafından alınarak okunmasını sağlamamız gerekmektedir. Bunun için CONSUMER uygulamasında main code bloğu içerisine aşağıdaki gibi kodlarımızı oluşturuyoruz.

static void Main(string[] args)
        {
            string accountName = ConfigurationManager.AppSettings.Get("AccountName");
            string accountKey = ConfigurationManager.AppSettings.Get("AccountKey");

            var storageCredentials = new StorageCredentials(accountName, accountKey);
            var storageAccount = new CloudStorageAccount(storageCredentials, true);

            var queueClient = storageAccount.CreateCloudQueueClient();
            var queue = queueClient.GetQueueReference("robotcommands");
            queue.CreateIfNotExists();

            CloudQueueMessage newMessage = null;
            double secondsToDelay = 5;

            Console.WriteLine("Komutlar Okunmaya Başlanıyor");
            Console.WriteLine(string.Format("Mesajlar {0} Saniyede Güncellenmektedir.", secondsToDelay.ToString()));

            while (true)
            {
                newMessage = queue.GetMessage();
                if (newMessage != null)
                {
                    Console.WriteLine(string.Format("Alınan Komut: {0}", newMessage.AsString));
                    queue.DeleteMessage(newMessage);
                }
                else
                    Thread.Sleep(TimeSpan.FromSeconds(secondsToDelay));
            }
        }

Kod bloğunda görüldüğü gibi robotcommands referansını içeren queue ile storage üzerinde yeni bir mesaj olup olmadığını GetMessage metodundan faydalanarak ulaşabiliyoruz. Başlangıçta Null olarak değer verdiğimiz queue için eğer yeni bir mesaj içerildiği takdirde GetMessage metodundan dönecek olana değeri içerisine almasını sağlayarak yeni mesajı ekrana bastırıyoruz. Böylece Aşağıdaki Gibi projemizi çalıştırdığımızda sonucumuza ulaşıyoruz.

Capture Windows Azure üzerinde bulut tabanlı queue hizmetlerini böylece tamamladık gerekli demoları kendi senaryolarınıza göre uyarlayarak kullanabilir ve geliştirebilirsiniz. Herkese kolay gelsin 🙂


Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s