Azure Functions Serisi #18 – Queue Trigger

Merhaba,

Bu içeriğimizde Azure Functions yazı serisinin son makalesi olan Queue Trigger üzerine irdelemede bulunuyor olacağız.

Queue Trigger Nedir?

Azure Storage içerisindeki herhangi bir queue servisindeki kuyruğa mesaj geldiğinde tetiklenecek olan ve gönderilen mesajı elde edip işlem yapmamızı sağlayan bir trigger’dır. Kuyruktaki mesajı; string olarak yahut serialize edilmişse uygun entity’e deserialize ederek ya da Input Binding işlemine tabii tutarak elde etmemizi sağlar. Tüm bunların dışında gelecek olan mesaja dair detayları görebilmemiz için CloudQueueMessage türünden de elde ederek ekstra bilgiler edinebilmemizide sağlamaktadır. İçeriğimizde tüm bu yöntemleri tek tek ele alıp mesajların nasıl işlendiğini incelemiş olacağız.

Queue Trigger Oluşturma

Visual Studio üzerinden Queue Trigger oluşturmanın diğer trigger’ların oluşturulmasından pek farkı bulunmamaktadır.
Azure Functions Serisi #18 - Queue Trigger
Burada sağ taraftaki menülerden bir önceki Blob Trigger başlıklı yazımızdakilerle benzer olanları birebir aynı mahiyette işlevselliğe sahiptirler. İlgili yazıdaki alakalı bölümü queue trigger’a uyarlayarak burada alıntılıyorum;

  • Storage Account(AzureWebJobsStorage)
    Queue Trigger’ın kullanacağı Azure Storage account’unu seçiniz.
  • Connection string setting name
    Kullanılacak Azure Storage’ın connection string değerini giriniz. Eğer boş geçersek default olarak local emulator’de ki storage’a bağlantı sağlanacaktır.

Geriye bir tek ‘Queue Name’ alanı kalmaktadır. Bununda oluşturulacak kuyruğun adı olduğu aşikardır 🙂

İlgili uygulamayı oluşturduktan sonra karşımıza gelen fonksiyona göz atarsak eğer;

    public static class Function1
    {
        [FunctionName("Function1")]
        public static void Run([QueueTrigger("myqueue-items", Connection = "")]string myQueueItem, ILogger log)
        {
            log.LogInformation($"C# Queue trigger function processed: {myQueueItem}");
        }
    }

görüldüğü üzere ‘QueueTrigger’ attribute’u ile işaretlenmiş ve ‘myqueue-items’ değerine sahip bir string parametre üzerinden mesaj yakalanmaktadır.

Şimdi bu trigger’ı test edebilmek için öncelikle ilgili Azure Queue Storage’da ‘myqueue-items’ isminde bir kuyruk oluşturalım ve ardından trigger’ı derleyip, çalıştıralım.
Azure Functions Serisi #18 - Queue Trigger
Azure Functions Serisi #18 - Queue Trigger
Görüldüğü üzere kuyruğa verilen her bir mesaj neticede ilgili function tarafından string olarak karşılanıp tüketilmektedir. İsterseniz ilgili mesajı bir entity ile karşılayabilir ve otomatik olarak parse edip elde edebilirsiniz.

Şöyle ki;

    public class Message
    {
        public string Key { get; set; }
        public string Value { get; set; }
    }
    public static class Function1
    {
        [FunctionName("Function1")]
        public static void Run([QueueTrigger("myqueue-items", Connection = "")] Message message, ILogger log)
        {
            log.LogInformation($"C# Queue trigger function processed: {message.Key} - {message.Value}");
        }
    }

Azure Functions Serisi #18 - Queue Trigger

Ya da! İçeriğimizin ilk paragraflarında belirttiğim gibi mesajı CloudQueueMessage türünden karşılayabilir ve gelen mesaja dair ekstradan detaylı bilgilerde edinebilirsiniz.

    public static class Function1
    {
        [FunctionName("Function1")]
        public static void Run([QueueTrigger("myqueue-items", Connection = "")] CloudQueueMessage message, ILogger log)
        {
            log.LogInformation($"Message         : {message.AsString}");
            log.LogInformation($"Expiration Time : {message.ExpirationTime}");
            log.LogInformation($"Id              : {message.Id}");
            log.LogInformation($"Dequeue Count   : {message.DequeueCount}");
            log.LogInformation($"Pop Receipt     : {message.PopReceipt}");
        }
    }

Azure Functions Serisi #18 - Queue Trigger

Queue Trigger İle Input Blob Binding

Şimdi, Azure Queue Storage’a gönderilen mesaj ile bir Blob Storage hesabına input binding gerçekleştirerek, eşleşen dosyayı elde edip bilgilerini yazdıran bir Queue Trigger oluşturalım.

    public static class Function1
    {
        [FunctionName("Function1")]
        public static void Run([QueueTrigger("myqueue-items", Connection = "")] string message, ILogger log,
            [Blob("files/{queueTrigger}", FileAccess.Read, Connection = "")] CloudBlockBlob cloudBlockBlob)
        {
            log.LogInformation($"File Name : {cloudBlockBlob.Name}");
            log.LogInformation($"Blob Type : {cloudBlockBlob.BlobType}");
        }
    }

Bu yazdığımız trigger’ı incelersek eğer; input binding yapılan Blob Storage içerisindeki ‘files’ isimli container içerisinde, queue’dan gelecek olan mesajı temsil eden ‘queueTrigger’ keyword’ü ile eşleşen blob’ları elde edip bilgilerini okumamızı sağlamaktadır. Sadece okuma işlemi yapıldığı için ‘FileAccess.Read’ olarak ayarlanmıştır. Ayrıca bu binding ‘CloudBlockBlob’ yerine ‘Stream’ ya da ‘CloudBlobContainer’ olarak da alınabilirdi.

Uygulamayı derleyip, çalıştırırsak eğer;
Azure Functions Serisi #18 - Queue Trigger
şeklinde verilen değere karşılık gelen blob’u elde edip, bilgilerini logladığını gözlemleyebilmekteyiz.

İlgilenenlerin faydalanması dileğiyle…
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar dilerim…

Bunlar da hoşunuza gidebilir...

1 Cevap

  1. 30 Ağustos 2020

    […] Azure Functions Serisi #18 – Queue Trigger […]

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*