2015-03-31 12 views
5

Czy jest możliwe ustawienie oddzielnych harmonogramów dla pojedynczych niewywołanych funkcji w webjob Azure? Pytam, ponieważ mam pół tuzina indywidualnych zadań, które chciałbym wykonywać o różnych porach dnia i w różnych odstępach czasu i nie chcę tworzyć osobnego projektu dla każdego z nich.Oddzielne harmonogramy funkcji Azure webjob?

+0

Przepraszamy. Nie rozumiem. Chcesz jednego ciągłego webjob z różnymi pracami podrzędnymi w środku? Każda pod-praca z innym harmonogramem? –

+0

A webjob może ujawnić różne funkcje. W moim przypadku chcę, aby wszystkie te zostały zaplanowane, a nie uruchomione. Jako takie mam wiele funkcji ozdobionych atrybutem NoAutomaticTrigger i chciałbym uruchomić każdy z nich w innym harmonogramie. –

+0

W sytuacji takiej jak Twoja użyłem działającej aplikacji konsolowej z wewnętrznym i niestandardowym zarządzaniem zaplanowanymi działaniami. –

Odpowiedz

7

Tak można za pomocą TimerTriggerAttribute

Oto przykładowy kod:

public class Program 
{ 
    static void Main(string[] args) 
    { 
     JobHostConfiguration config = new JobHostConfiguration(); 

     // Add Triggers for Timer Trigger. 
     config.UseFiles(filesConfig); 
     config.UseTimers(); 
     JobHost host = new JobHost(config); 
     host.RunAndBlock(); 
    } 

    // Function triggered by a timespan schedule every 15 sec. 
    public static void TimerJob([TimerTrigger("00:00:15")] TimerInfo timerInfo, 
           TextWriter log) 
    { 
     log.WriteLine("1st scheduled job fired!"); 
    } 

    // Function triggered by a timespan schedule every minute. 
    public static void TimerJob([TimerTrigger("00:01:00")] TimerInfo timerInfo, 
           TextWriter log) 
    { 
     log.WriteLine("2nd scheduled job fired!"); 
    } 
} 

Można też użyć wyrażenia CRON aby określić, kiedy aby uruchomić funkcję:

Continuous WebJob with timer trigger and CRON expression

+0

Ma to problem z zależnościami w usłudze Azure.Storage większy niż 5.0.2 i nie zostanie zainstalowany. Korzystam z najnowszego Storage 6.2.0 i potrzebuję rozwiązania alternatywnego. –

+0

Ale cały zestaw SDK Webjob ma zależność z Azure.Storage <= 5.0.2 – Thomas

+0

Prawidłowo, a ja korzystałem z wersji wstępnej usługi Azure App Service nuget na https://www.myget.org/F/azure-appservice /api/v3/index.json TimerJob jest tak łatwy w użyciu, że musiałem. :) –

0

Możesz napisać zwykłą starą aplikację konsolową z nieskończoną pętlą, która zatrzymuje się po zakończeniu każdej iteracji za pomocą Thread.Sleep(). Za każdym razem, gdy pętla się budzi, sprawdza harmonogram, który utrzymuje wewnętrznie i wywołuje funkcje, które mają działać w tym czasie. Harmonogram może być przechowywany w app.config, dzięki czemu możesz go zmienić bez rekompilacji WebJob, po prostu wgraj nowy app.config i uruchom go ponownie.

Lub jeśli wolisz, możesz pominąć pętlę bez końca i zaplanować WebJob w ustalonym interwale, powiedz co 30 minut i spraw, aby za każdym razem sprawdzał wewnętrzny harmonogram.

0

Skończyło się na tym, że korzystałem z Quartz.net z ciągłym zadaniem do planowania różnych czynności wykonywanych wewnątrz pracy w sieci. To zadziałało bardzo dobrze.

Powiązane problemy