Azure Stroge'da Queue Servisi

0 dakikada yazıldı

28819 defa okundu

Düzenle

Azure Storage Account'larda gelen blob ve table'dan sonra son servis
olan queue (kuyruk) servisi veri saklama açısından diğer servisler kadar
öne çıkmasa da sonuç itibari güzel bir kuyruklama altyapısı olarak
uygulamaların azure ortamındaki varlığı için çok kritik değere sahip.
Gelin hızlıca bu kuyruk altyapısının nasıl çalıştığında ve nasıl
kullanılabileceğine göz atalım.

[C#]

var storageAccount = CloudStorageAccount.FromConfigurationSetting("DataConnectionString");
var Client = storageAccount.CreateCloudQueueClient();
CloudQueue q = Client.GetQueueReference("yenikuyruk");
q.CreateIfNotExist();

Yeni bir kuyruk yaratmak için ilk olarak storageAccount üzerinden
QueueClient alıyoruz. QueueClient nesnesi üzerinden aynı bir blob
veya table yaratırmış gibi kuyruk adı verip bir referans alıp sonra da
CreateInNotExist ile kuryuğumuzu yaratabiliyoruz. Yaratılan bir kuyruğa
istediğimiz kadar mesaj ekleyebiliriz.

[C#]

var storageAccount = CloudStorageAccount.FromConfigurationSetting("DataConnectionString");
var Client = storageAccount.CreateCloudQueueClient();
CloudQueue q = Client.GetQueueReference("yenikuyruk");
CloudQueueMessage yeniMesaj = new CloudQueueMessage(
                                string
.Format("text:{0}",TextBox1.Text));
q.AddMessage(yeniMesaj);

Yukarıdaki örnekte kuyruğu aldıktan sonra hemen yeni bir
CloudQueueMessage yaratıyoruz. Her mesajın içine bir byte array veya
string yerleştirilebiliyor. Tabi istediğiniz gibi elinizdeki objeleri de
serialize edip buraya koymakta serbestsiniz fakat dikkat :) her mesaj
ancak 64KB büyüklüğünde olabilir. Genel olarak eğer kuyruğa büyük bir
veri yerleştirmek gerekiyorsa veriyi kuyruğa koymak yerine bir blob'a
koyup blobun Uri'yi kuryuğa atmak çok daha mantıklı olacaktır.

[C#]

q.AddMessage(yeniMesaj, TimeSpan.FromMinutes(1),TimeSpan.FromMinutes(2));

Eğer isterseniz kuyruğa bir mesaj eklerken iki tane daha parametre
verebilirsiniz. Bunlardan ilki kuyruktan mesajın ne kadar süre
yaşayacağı, yani kuyrukta var olacağı, bir diğer ise kuyruğa eklenmesine
rağmen mesajın ne kadar süre sonra erişilebilir olması. Konuyu aslında
şöyle açıklayabiliriz, bu kuyruğa mesaj koymamızın bir amacı var. Bazı
işleri sıraya koyuyoruz sonra da worker'lar gelip alıp bu işleri
yapıyorlar. Koyduğunuz bir işin siz koyduktan 2 dakika sonra alınabilir
(görünür) olmasını sağlayabiliyor ve 1 dakika boyunca da alınıp
yapılmamışsa yokolmasını ayarlayabiliyorsunuz. Her ne ayar yaparsanız
yapın :) 7 gün içinde bir mesaj alınmaz ise kuyruktan her halükarda
silinecektir.

[C#]

var storageAccount = CloudStorageAccount.FromConfigurationSetting("DataConnectionString");
var Client = storageAccount.CreateCloudQueueClient();
CloudQueue q = Client.GetQueueReference("yenikuyruk");
CloudQueueMessage mevcutMesaj = q.GetMessage();

Eğer kuyruktan bir mesaj almak isterseniz doğrudan Queue üzerinden
GetMessage() metodunu çalıştırabilirsiniz. Bir mesaj kuyruktan
alındıktan sonra 30 saniye içerisinde eğer alan kişi tarafından silinmez
ise mesaj tekrar kuyrukta görünür hale gelir. Alan uygulama eğer
istersen mesajı alırken daha uzun bir süre için de alabilir. Bunun için
GetMessage() metoduna TimeSpan tipinde bir parametre geçebilirsiniz.
Böylece aldığınız mesajla ilgili işlemleri yapıp sonra geri dönüp
mesajın tamamen silinmesi için komut gönder aralığınız daha geniş
olacaktır. Alınan bir mesaj zaten alındığı andan süresi bitene kadar
diğer tüm alıcılara görünmez olacaktır. Bu yapı sayesinde Azure'daki
kuyruklarda mesaj kaybı engelleniyor. Unutmadan :) bir mesajı en fazla 7
günlüğüne alabilirsiniz, daha uzun süre görünmez tutamazsınız.

Bir mesajı alıp içeriğini mesaja ait SetMessageContent metodu ile
değiştirebilirsiniz. DequeueCount property'si üzerinden ise o ana
kadar mesajı alıp zamanında operasyonu bitiremeyen kaç alıcının mesaja
ulaştığına dair rakamı bulabilirsiniz. Böylece "message poisining"in de
önüne geçme şansınız olur.

Kuyruklar bu kadar basit :) Tabi kuyrukların kullanım şekilleri ve
yerleri önemli. Aslında teknik olarak API'leri çok uğraştırmasa da
görevleri ve önemleri gerçekten çok büyük ;) En kısa zamanda farklı
makalelerde kuyrukları sahnede görmek üzere ;) Kendinize çok iyi bakın!