Frage

Ich brauche Planung von Aktionen / Veranstaltungen anbieten zu können, in unserer Website. Ein Mist Analogie ein Kalendersystem sein könnte, wenn eine Person einen Kalendereintrag hinzufügt und wenn das Datum / Zeit ‚Hit‘ ist, dann eine gewisse Logik (zB einen Bericht berechnen) ausgelöst wird.

Ich könnte Hunderte oder sogar Tausende von geplanten Veranstaltungen werden, die durch meine Kunden eingegeben werden. Wenn ein Client etwas zu bekommen geplant eintritt, werde ich diese Informationen in der Datenbank speichern. Dann vermute ich bin, ich werde ein Event / Job irgendwo hinzugefügt, die die Datenbanktabelle Primärschlüssel enthalten wird. wenn das Ereignis gezündet werden soll, werde ich, dass Informationen aus dem db packen, dann die Logik zu tun. getan.

Was sind einige gemeinsame Lösungen zu handhaben?

Ich bin mit .NET 3.5 SP1. DB ist SQL Server 2008. UI obwohl webbasiert werden.

war ich nicht sicher, ob Menschen MSMQ verwenden? Oder etwas in SQL Server gebaut? Oder einige Open-Source-Bibliothek (z. B. Quartz.NET ) mit NT-Dienst. Server wird Windows 2008 Standard Edition.

Auch - bitte keine Vorschläge einen cron-Job gleichwertige oder alle Befehlszeilen-Skripts verwenden, etc.

.

Schließlich, und dies ist ein sekundäres Ziel .. Ich würde gerne diese für shiz auf azur werfen und kichert ... so ist das auch möglich? es ist nur eine Wunschliste Idee. Ich würde es vorziehen, sie auf ein eigenes Feld zu tun, wenn die Lösung ist einfacher, als Azure verwendet wird.

cheers:)

edit: Logik zu verarbeiten, wenn ein Ereignis ausgelöst werden muss, sind Hintergrundjobs. Keine Benutzeroberfläche erforderlich.

War es hilfreich?

Lösung

Quartz.NET könnte wahrscheinlich auch diesen Anforderungen umgehen ganz gut. Die Vorteile, die ich sehe, sind auf verschiedene Weise der Einstellung den Scheduler (CronTrigger + Kalender) und die Möglichkeit, Ihre Arbeitsplätze in kleinen Einheiten von prüfbaren Code (Jobs) zu haben.

Quartz.NET gibt Ihnen auch die nötige Verteilung und Failover mit Clustering-Funktionen. Ein nettes Feature ist auch pro-Trigger konfigurierbar Fehlzündung Handhabung Setups, die Ihnen die Möglichkeit geben, zu Aussetzern und Planer Ausfallzeiten zu reagieren.

SQL Service Broker den Vorteil ohne Abfrage zu haben scheinen, frage ich mich, ob das jemals obwohl das Problem sein, haben Broker den Nachteil ein wenig kompliziert klingen (zumindest aus der Beschreibung, die ich oben lesen).

Nur mein voreingenommen $ 0.02.

Andere Tipps

Workflow Foundation kann dies tun. Verwenden Sie einen Verzögerung Aktivität , stellen Sie die Timespan zu (DesiredTimeOfExecution - Now) . Bei größeren Maßstab Systeme, Set UnloadOnIdle zu wahren, und die anstehenden Workflows werden, bis sie benötigt beibehalten werden.

Hier ist ein sehr einfaches Beispiel für die Verzögerung Aktivität .

WF ist Free , als Teil des .NET Framework 3.0 enthalten.

Was Sie wollen, ist SQL Server Service Broker.

Sie können zeitlich abgestimmten Datenbankzugriff tun für Kalenderdaten abzufragen, usw. Es ist messaged-basierte, mächtiger als MSMQ, erfordert keine Abfrage und kann in verteilten Umgebungen verwendet werden, wenn es das ist, was Sie brauchen. Funktioniert gut für mich!

Sie werden eine gespeicherte Prozedur treffen Sie Ihre Veranstaltung Informationen über eine SSB-Warteschlange in der db zu setzen. Sie werden feststellen, dass eine Nachricht in der Zukunft eine andere gespeicherte Prozedur, um aufzuwachen geben und zu verarbeiten, die Ihre Ereignisdaten packt und setzt auf eine Pickup-Warteschlange in die eine „externe Aktivierung“ der Fall ist. EA sendet eine Benachrichtigung an einen Windows-Dienst, der auf eine Konsolenanwendung zeigt. Die Konsolenanwendung greift nach der Event-Info von der Aufnahme Warteschlange. Jetzt haben Sie Ihre Ereignisdaten genau an der Zeit, die Sie wollen. Verarbeiten Sie es wie Sie wollen in der Konsolenanwendung.

Es gibt eine Lernkurve, aber es lohnt sich, wenn Sie die Zuverlässigkeit benötigen, Flexibilität und Skalierbarkeit, die SQL Service Broker bietet. Im Folgenden sind einige Links, die Sie den Start.

Hier ist ein Vergleich: SQL Service Broker vs. MSMQ

würde SO nur erlauben Sie mir einen Link leider zu posten. Ich könnte Sie sonst zu mehr Ressourcen darauf zu helfen, erhalten Sie mit SSB gestartet.

Hope, das hilft!

Eine Option könnte einen SQL-Auftrag wird die Schaffung an, was auch immer das detaillierteste Intervall dann haben Sie und die Verarbeitung all Ereignisse zu laufen.

Wenn Sie das Beste aus beiden wollen die .NET und SQL Server Welten können Sie Verwendung SQL-Aufträge und verwalteten Code Gespräches und . Ich habe keine Erfahrung mit dieser Lösung, damit ich up-front entschuldige mich, wenn die Ressource I ist vorgesehen, nicht sehr gründlich.

Wenn die Aufgaben sehr komplex sind und Sie nicht wollen, Baugruppen auf SQL Server laden oder Sie nicht nur ihr Scheduling-System mögen, dann würde ich einen .NET Windows-Dienst mit einer Drittanbieter-Scheduler-Plugin empfehlen. Persönlich, wenn die gesamte Code in einer gespeicherten Prozedur oder eine Reihe von gespeicherten Prozeduren gehalten werden kann ich einen Job machen würde, da ich denke, es ist viel einfacher zu verwalten und ein großer Teil der Arbeit bereits erledigt wurde.

Bearbeiten

Ich habe gerade bemerkt einen Kommentar, der die Granularität erklärt. Wenn Sie einige Aktionen, die wahrscheinlich einfacher sein würde, jede Minute dann eine .NET-Service-Lösung durchgeführt werden muß, da Sie wahrscheinlich eine Art von Multi-Threaded-Lösung implementieren würden.

Du wirst einen Job-Scheduler und einen Job-Manager benötigen, da Sie kleine Granularität haben, und Sie haben die Fähigkeit, a priori zu wissen, ob alle Jobs, die auf einer bestimmten Minute passieren wird von der nächsten Minute beenden.

Das macht die Aufgabe des Scheduler einfach. Sie sollten eine DB-Tabelle, die Ihre Arbeitsplätze und jede Minute speichert haben einen Job gehen Scheduler-Service auf diese Tabelle und wählen Sie die Jobs, die erledigt werden müssen.

Es wird diese Arbeitsplätze mit einem Job-Manager einreihen. Sie könnten eine andere Tabelle oder eine Transaktionswarteschlange verwenden Ihre Aufgabe einzureihen. Ihr Job Manager-Dienst wird die Jobwarteschlange überwachen. Sie können Ihre eigene Rolle oder benutzen BizTalk der Auftragswarteschlange zu überwachen und treten eine Orchestrierung oder Workflow ab. Es wird die Aufgaben aus der Warteschlange nacheinander, führen Sie die Aufgaben ziehen und den Status des Auftrags in der DB aktualisieren.

Dein Problem Skalierbarkeit sein, abhängig von der Anzahl der Benutzer, die Anzahl der Aufgaben, die sie einreihen und wie intensiv (Zeit, Speicher, CPU, etc.) jede Aufgabe ist erlaubt. Wenn ich Sie wäre, würde ich auf die 1 Minute Zeitgranularität zurückzudrängen und schieben Sie es bis 5 Minuten. Was brauchen Sie, um 01.38 getan dass Sie nicht bis 13.40 Uhr warten zum? :)

Dies ist bereits ein diskutiertes Problem auf Stackoverflow. Sie gehen durch

in asp.net Job-Scheduler benötigen

Sie haben vergessen, den wesentlichsten Teil der Informationen in Ihrer Frage hinzufügen - ASP.Net

Es beschreibt einen Scheduler Rahmen für ASp.Net Web-Anwendungen, die wie ein Dienst ausgeführt werden kann und geben Sie eine Methode, die periodisch aufgerufen wird, und dann können Sie Ihre Logik Feuer Ereignisse zu laden, gültig diejenigen Warteschlange mit Timer.

Auch dies ist eine der billigsten aller Alternativen. Hoffe, das ist, was man benötigt.

Es hängt ein wenig von der Art des Systems. Ausgehend von der Annahme, dass die vollständige Definition der Ereignisse in der Datenbank gespeichert ist:

  • Wenn das Ereignis muss etwas in einer Web-Benutzeroberfläche verursachen, auf Updates in der Tabelle für die Einträge überprüfen, die ‚passiert‘ haben und die entsprechenden visuellen Anzeigen / screens / Pop-ups auf die nächste Web-Anfrage Ausgabe hinzufügen.
  • Wenn die Ereignisse auf der Hintergrundverarbeitung beziehen, ist die einfachste Lösung, eine separate Stand-alone-.NET-Anwendung zu schreiben, die fragen die Datenbank Ereignistabelle für neue Datensätze und prüft, gegen die Uhr, um zu sehen, welche Ereignisse geschehen. Sie können Phantasie gehen und Einfädeln beinhalten, wenn einige der Ereignisse lange laufende Prozesse usw. verursachen, aber das wäre das grundlegende Design sein. (Es werden nur Threading verwenden, wenn Sie müssen ... eine einfache Single-Threaded-Anwendung, die Umfragen der Tabelle robusteste wäre)
  

Dann bin zu raten, ich werde ein Event / Job irgendwo hinzugefügt, die die Datenbanktabelle Primärschlüssel enthalten wird. wenn das Ereignis gezündet werden soll, ich werde, dass Informationen aus dem db greifen, tut dann die Logik.

Ich weiß nicht, was die gemeinsame Lösung ist aber, das Rad neu zu erfinden, ich der Schaffung einer Datenbank gruppierten Index für die Ereigniszeit denken würde, so konnte ich die Datenbank jede Minute mit einer Aussage wie ... abfragen

SELECT * FROM Events WHERE Events.Time < next_minute
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top