Welche Ansätze gibt es, um geplante Aufgaben für Webanwendungen mit oder ohne separate Web-/Desktopanwendung zu erstellen?Geplante Aufgaben für Webanwendungen
Antwort
Wenn wir Microsoft-Plattform sprechen, dann würde ich immer einen separaten Windows-Dienst entwickeln, um solche Batch-Aufgaben zu behandeln.
Sie können immer auf dieselben Baugruppen verweisen, die von Ihrer Webanwendung verwendet werden, um eine bösartige Codeverdopplung zu vermeiden.
Ich denke, Stack Overflow selbst verwendet einen ApplicationCache Ablauf, um Hintergrundcode in Intervallen auszuführen.
Wenn Sie auf einem Linux-Host arbeiten, verwenden Sie mit ziemlicher Sicherheit cron.
Unter Linux können Sie Cron-Jobs (http://www.unixgeeks.org/security/newbie/unix/cron-1.html) verwenden, um Aufgaben zu planen.
Verwenden Sie URL-Abrufer wie wget oder curl, um HTTP-GET-Anforderungen zu stellen.
Sichern Sie Ihre URLs mit Authentifizierung, damit niemand die Aufgaben ausführen kann, ohne den Benutzer/das Passwort zu kennen.
Ich denke, Windows 'integrierte Taskplaner ist das vorgeschlagene Werkzeug für diesen Job. Das erfordert eine externe Anwendung.
Dies kann oder kann nicht das sein, was Sie suchen, aber lesen Sie diesen Artikel, "Simulate a Windows Service using ASP.NET to run scheduled jobs". Ich denke, StackOverflow kann diese Methode verwenden oder es wurde zumindest darüber gesprochen, sie zu verwenden.
Eine sehr einfache Methode, die wir verwendet haben, wo ich arbeite, ist dies:
- eine Webservice/Web-Methode einrichten, die die Aufgabe ausführt. Dieser Webservice kann bei Bedarf mit Benutzername/Passwort gesichert werden.
- Erstellen Sie eine Konsolenanwendung, die diesen Webdienst aufruft. Auf Wunsch können Sie die Konsolen-App Parameter senden lassen und/oder eine Art von Metriken zur Ausgabe an die Konsole oder externe Protokollierung zurückholen.
- Planen Sie diese ausführbare Datei in dem Taskplaner der Wahl.
Es ist nicht schön, aber es ist einfach und zuverlässig. Da die Konsolen-App im Wesentlichen nur einen Herzschlag darstellt, um der App mitzuteilen, dass sie ihre Arbeit machen soll, muss sie keine Bibliotheken mit der Anwendung teilen. Ein weiteres Plus dieser Methodik ist, dass es ziemlich trivial ist, bei Bedarf manuell zu starten.
Jeff diskutiert dies auf dem Stack Overflow Blog - http://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/
Grundsätzlich Jeff vorgeschlagen für den Aufruf bestimmter Aufgaben die CacheItemRemovedCallback als Timer.
Ich persönlich glaube, dass automatisierte Aufgaben als ein Dienst, eine geplante Windows-Task oder ein Job in SQL Server behandelt werden sollten.
Unter Linux, Kasse Cron.
URL verwenden Fetcher wie wget oder curl, um HTTP-GET-Anfragen.
Sichern Sie Ihre URLs mit Authentifizierung, damit niemand die Aufgaben ausführen kann, ohne den Benutzer/das Passwort zu kennen.
Sie können auch cron sagen PHP-Skripte direkt, zum Beispiel laufen. Und Sie können die Berechtigungen für die PHP-Datei festlegen, um zu verhindern, dass andere Personen auf sie zugreifen oder noch besser, haben diese Dienstprogramme nicht in einem Web-Verzeichnis zugänglich ...
Java und Spring - Verwenden Sie Quarz. Sehr schön und zuverlässig - http://static.springframework.org/spring/docs/1.2.x/reference/scheduling.html
Ich denke, es gibt einfachere Möglichkeiten als mit Cron (Linux) oder Taskplaner (Windows). Sie können diese in Ihre Web-App bauen mit: (a) Quarz-Scheduler,
oder wenn Sie nicht eine andere 3rd-Party-Bibliothek in Ihre Anwendung integrieren wollen: (b) beim Start einen Thread erstellen, die verwendet die Java-Standardklasse 'java.util.Timer', um Ihre Aufgaben auszuführen.
Der große Nachteil dabei ist, wenn Sie den Web-Service auf mehreren Knoten laufen lassen, wollen Sie nicht, dass Ihr Scheduler mehrere Male gleichzeitig läuft. –