Azure Functions Serisi #16 – Timer Trigger

Merhaba,

Bu içeriğimizde Azure Functions yazı serisinin onaltıncı makalesi olan Timer Trigger konusunu inceleyeceğiz.

Timer Trigger Nedir?

Timer Trigger, belirli periyotlarda yapılacak işlemler neticesinde kullanılan fonksiyon çeşididir. Örneğin; uygulamanızda ki üyelere periyodik olarak haftalık içerik bülteni göndermek ya da her ay kullanıcıların aktiflik durumunu kontrol ederek herhangi bir aktivasyon göstermeyenlere mail göndermek istediğiniz durumlarda Timer Trigger’ı kullanabilirsiniz.

Timer Trigger Nasıl Çalışmaktadır?

Timer Trigger’ın çalışabilmesi için kendisine verilen ve çalışma periyodunu ifade eden NCRON Expression değeri kullanılmaktadır. NCRON, CRON değerinin bir gömlek gelişmiş versiyonudur. Şimdi ilk olarak CRON’u ardından onun bilgisi ışığında NCRON’u masaya yatıralım…

CRON Nedir?
Linux işletim sistemlerinde periyodik çalışmaları tarif eden ve böylece işlevsel olarak zamana dayalı görev tanımlamamızı sağlayan yapısal ifadedir.

Bir CRON örneği fiziksel olarak aşağıdaki gibidir;

# ┌───────────── dakika (0 – 59)
# │ ┌───────────── saat (0 – 23)
# │ │ ┌───────────── ayın günü (1 – 31)
# │ │ │ ┌───────────── ay (1 – 12)
# │ │ │ │ ┌───────────── haftanın günü (0 – 6) (Pazar’dan Cumartesiye kadar)
# │ │ │ │ │
# │ │ │ │ │
# │ │ │ │ │
# * * * * *

Her bir yıldız(*) karakteri kendisine karşılık gelen zamansal ifadenin sayısal bildirimini barındırmaktadır.

Hasbel kader pratik olması amacıyla aşağıdaki örnekleri inceleyiniz;

  • ‘1 12 7 3 2’ ifadesi; Mart ayının 7. gününün saat 12:01’ini ve Salı gününü ifade eder.
  • ‘5 21 9 2 5’ ifadesi; Şubat ayının 9. gününün saat 21:05’ini ve Cuma gününü ifade eder.
  • ‘5 5 5 5 5’ ifadesi; Mayıs ayının 5. gününün saat 05:05’ini ve Cuma gününü ifade eder.

*(yıldız) karakteri ilgili zamansal ifadenin herhangi bir değerine karşılık gelmektedir;

  • ‘0 22 * * 5’ ifadesi; her Cuma gününün saat 22:00’ını ifade eder.
  • ‘* * * * 5’ ifadesi; her Cuma gününün her dakikasını ifade eder.
  • ’11 2 3 4 *’ ifadesi; Nisan ayının 3. gününün saat 02:11’ini ifade eder.
  • ‘* * * * *’ ifadesi; herhangi bir dakikayı ifade eder.

/ karakteri ilgili zamansal ifadenin periyotsal değerine karşılık gelmektedir;

  • ‘*/12 3 3 3 3’ ifadesi; 3. ayın 3. ve Çarşamba günlerinde 3. saatin her 12 dakikada birini ifade eder.
  • ‘* * * */3 *’ ifadesi; her 3 ayda bir dakikayı ifade eder.

– karakteri ilgili zamansal ifadenin aralıksal değerine karşılık gelmektedir;

  • ‘1-10 * * */3 *’ ifadesi; her 3 ayda bir, 1’den 10’a kadar olan her dakikayı ifade eder.
  • ‘1-10 * 5-7 */3 *’ ifadesi; her 3 ayda bir, ayın 5. gününden 7. günü arasında 1’den 10’a kadar olan her dakikayı ifade eder.

CRON hesaplamasını daha net yapabilmek için crontab.guru adresindeki uygulamayı kullanabilirsiniz.

NCRON Nedir?
NCRON, CRON değerinin saniye katılmış halidir.

# ┌───────────── saniye (0 – 59)
# │ ┌───────────── dakika (0 – 59)
# │ │ ┌───────────── saat (0 – 23)
# │ │ │ ┌───────────── ayın günü (1 – 31)
# │ │ │ │ ┌───────────── ay (1 – 12)
# │ │ │ │ │ ┌───────────── haftanın günü (0 – 6) (Pazar’dan Cumartesiye kadar)
# │ │ │ │ │ │
# │ │ │ │ │ │
# │ │ │ │ │ │
# * * * * * *

Azure servisleri zamanlanmış görevlerde NCRON’u benimsemiştir.

Timer Trigger Oluşturma

Timer Trigger, Visual Studio üzerinden basitçe oluşturulabilmektedir.
Azure Functions Serisi #16 - Timer Trigger
Sağ taraftaki ‘Schedule’ alanına dikkat ederseniz, zamanlayıcının default programını göreceksiniz. İstediğiniz gibi müdahale edebilir, değiştirebilirsiniz.
Azure Functions Serisi #16 - Timer Trigger
Uygulamada direkt karşımıza gelen function’ı da incelersek eğer ‘TimerTrigger’ attribute’u ile işaretlenmiş ‘TimerInfo’ türünden parametreden oluşmaktadır. İşte bu da ilgili trigger’ı Timer Trigger olarak ayarlayan noktadır. Default olarak gelen ‘0 */5 * * * *’ değerinden de anlaşılan her 5 dakikada bir tetiklenecek olmasıdır.

İlgili function’ı hiç oynamadan direkt olarak derleyip çalıştırdığınızda her 5 dakikada bir tetiklendiğini göreceksiniz. Bizler süreci hızlandırmak için NCRON değerini her 1 saniyede bir tetiklenecek şekilde(*/1 * * * * *) değiştirip derlediğimizde aşağıdaki sonuçla karşılaşmaktayız.
Azure Functions Serisi #16 - Timer Trigger

İşte bu kadar basit…

Output Blob Binding

Şimdi Timer Trigger kullanarak Output Blob Binding işlemini ele alan bir örnek tasarlayalım. Bunun için öncelikle Microsoft.Azure.WebJobs.Extensions.Storage kütüphanesinin uygulamaya yüklenmesi gerekmektedir.

    public static class Function1
    {
        [FunctionName("Function1")]
        public async static Task Run([TimerTrigger("*/1 * * * * *")] TimerInfo myTimer, ILogger log,
            [Blob("logs/veri.txt", System.IO.FileAccess.Write, Connection = "StorageConnectionString")] Stream blobStream)
        {
            string text = $"Timer Trigger tetiklenmiştir. {DateTime.Now}";
            byte[] buffer = Encoding.ASCII.GetBytes(text);
            await blobStream.WriteAsync(buffer, 0, buffer.Length);
            blobStream.Close();
            await blobStream.DisposeAsync();
        }
    }

Yukarıdaki kod bloğunu incelerseniz eğer; bir Output Blob Binding işlemi gerçekleştirilmekte ve ‘logs’ isimli container içerisinde ‘veri.txt’ dosyası oluşturularak(yoksa) içerisine gerekli log atılmaktadır.

Bu şekilde uygulamayı derleyip, çalıştırdığınızda ‘veri.txt’ dosyasının oluşturulduğunu ve içerisine aşağıdaki gibi logun atıldığını göreceksiniz.
Azure Functions Serisi #16 - Timer Trigger

İsterseniz timer trigger tetiklendikçe container içerisine o anın tarih bilgisini isim olarak alan dosyalar oluşturarak içlerine ayrı ayrı loglamayı yapabilirsiniz. Bunun için ‘Blob’ attribute’unda ‘blobPath’ değerini aşağıdaki gibi tanımlamanız gerekmektedir.

logs/{DateTime}.txt

Azure Functions Serisi #16 - Timer Trigger
Ya da aşağıdaki gibi bir tanımlamayla random isimde dosyalar oluşturarak loglamalar gerçekleştirilebilir.

logs/{rand-guid}.txt

Azure Functions Serisi #16 - Timer Trigger

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

Bunlar da hoşunuza gidebilir...

1 Cevap

  1. 25 Ağustos 2020

    […] Azure Functions Serisi #16 – Timer Trigger […]

Bir cevap yazın

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

*