2012-06-05 4 views
8

Ich habe eine einfache Azure Worker-Rolle ausgeführt, die jeden Tag um 12 Uhr eine Aufgabe ausführt. Unten ist der Code, der dies bewirkt.So planen Sie eine Aufgabe in der Windows Azur-Worker-Rolle

public override void Run() 
{ 
    try 
    { 
     while (true) 
     { 
       int time = Convert.ToInt32(DateTime.Now.TimeOfDay); 
       if (time == 12) 
       { 
        DoSomethingElse(); 
       } 
     } 

    } 
    catch (Exception ex) 
    { 
     Log.Add(ex, true); 
    }    
} 

Hier DoSomethingElse() ist eine Methode, eine E-Mail an jedem Tag 12.00 zu senden, und auch feuert einmal und nur einmal pro Tag.

Wie kann ich einen Scheduler implementieren, der ausgelöst wird, wenn die Uhrzeit 12 Uhr mittags ist, und DoSomethingElse() ausführen.

Meine Frage ist: Ist dies (oben genannten Code) die beste Methode oder verwenden Sie ein Drittanbieter-Tool.

+0

möglich Duplikat [Azure - wie kann ich einen Job ausführen, die eine Funktion in der Webservice jede Stunde ruft? ] (http://stackoverflow.com/questions/8548159/azure-how-do-run-a-job-that-calls-a-funktion-in-the-webservice-every-hour) –

+0

Auf einer Seite - Beachten Sie, dass der obige Code zu einer engen Schleife führt, bei der die CPU ständig auf 100% gesetzt wird und Azure möglicherweise Ihre Worker-Rolle neu startet. Sie müssen mindestens eine Schlafanweisung dort hineinlegen. Oder verwenden Sie einen Timer, um zu warten. Aber in jedem Fall müssen Sie aufgrund der Multi-Instanz nach anderen Antworten für die Planung suchen, wie zum Beispiel über was Makogon spricht. – Frans

Antwort

5

Es gibt mehrere andere Fragen hier, die damit zu tun haben (und ich habe eine oben markiert). Nachdem Sie das gesagt haben, und auf die Gefahr der Wiederholung, was andere Antworten bereits angeben:

In Ihrem Fall würde eine einfache Nachricht in einer Windows Azure-Warteschlange, zeitversetzt, bis Mittag nicht angezeigt werden, funktionieren. Dies hilft auch beim Umgang mit Multi-Instanz-Szenarien: Wenn Sie zwei Instanzen Ihrer Rolle ausführen, möchten Sie nicht, dass dieselbe geplante Aufgabe zweimal ausgeführt wird. Sie benötigen also eine Möglichkeit, dass nur einer dieser Instanzen diesen Code ausführt. Dies kann einfach über eine Warteschlangennachricht gehandhabt werden, oder Sie können Scheduler-Code für eine einzelne Instanz ausführen, indem Sie etwas wie eine Blob-Lease (die möglicherweise nur eine Schreibsperre hat) als Mutex verwenden. Dies wird im @ smarx-Blogpost here behandelt.

+0

Aber ich habe Zweifel, dass, wenn ich es über die Warteschlange Nachricht implementieren dasselbe Problem immer noch exixt becase multiple Instanz erstellt mehrere que Nachricht zur gleichen Zeit ..? – Hope

+1

Wahr, es ist ein Startproblem. Betrachten Sie einen Mutex über [email protected] hat dies in seinem Blogpost [hier] behandelt (http://blog.smarx.com/posts/building-a-task-scheduler-in-windows-azure). –

+0

Azure verfügt nun über einen einfachen Scheduler-Dienst, der einen Endpunkt auf der Basis eines in hohem Maße konfigurierbaren Zeitplans aufruft. Das Problem ist, dass es für lange laufende Prozesse nicht funktioniert. Die Zeitüberschreitung ist 30s und kann nicht konfiguriert werden. – AntonK

0

Cloud-Scheduler befasst sich speziell mit Aufgabenplanung in der Cloud.

Ich bin gerade auf das so Ich habe es nicht versucht.

http://getcloudscheduler.com/

aktualisieren: Forget Cloud Scheduler! Ich habe meinen täglichen Zeitplan 600 mal hintereinander ausgeführt, was dazu führte, dass 600 E-Mails an meine Kunden gesendet wurden. Nicht benutzen !!!

0

Verwenden Sie die Azure Task Scheduler. Schönes Tutorial von Scott Gu here.

Konkret würde ich den Aktionstyp "Speicherwarteschlange" betrachten - einfach für Warteschlangenereignisse in Ihrer Worker-Rolle registrieren.

(Beachten Sie, dass dieser Service Geld kosten kann, wenn Sie Aufgaben planen häufiger als jede Stunde wollen.)

+0

Ich stimme zu. Das ist der einfachste Weg. Verwenden Sie einfach einen Webhook, um das Ereignis auszulösen. Der Azure-Taskplaner ist jedoch lächerlich teuer für das, was er tut. –

Verwandte Themen