Tricky Quartz.NET-Szenario

7

Ok, ein bisschen Hintergrund hier. Ich habe eine große Web-Anwendung (MVC3), die alle Arten von unwichtigem Zeug macht. Ich brauche diese Webanwendung, um Ad-hoc-Quartz.NET-Jobs in einer Oracle-Datenbank einplanen zu können . Dann möchte ich, dass die Jobs später über einen Windows-Dienst ausgeführt werden. Idealerweise würde ich sie gerne in regelmäßigen Intervallen einsetzen, aber mit der Option, Jobs über die Web-App hinzuzufügen.

Grundsätzlich ist die gewünschte Architektur eine Variation davon:

Web app & lt; - & gt; Quartz.NET & lt; - & gt; Datenbank & lt; - & gt; Quartz.NET & lt; - & gt; Windows-Dienst

Was ich bisher programmiert habe:

  • Ein Windows-Dienst, der (vorerst) die Jobs plant und ausführt. Dies wird auf lange Sicht natürlich nicht der Fall sein, aber ich frage mich, ob ich das einfach beibehalten und modifizieren kann, damit es im obigen Diagramm beide "Quartz.NETs" repräsentiert.
  • Die Web-App (Details, die ich denke, sind hier nicht sehr wichtig)
  • Die Jobs (die eigentlich nur andere Windows-Dienste sind)

Und ein paar wichtige Hinweise:

  • Es muss von einem Windows-Dienst ausgeführt werden, und es muss über die Web-App geplant werden (um die Belastung von IIS zu reduzieren)
  • Die obige Architektur kann ein wenig neu arrangiert werden, vorausgesetzt, das obige Geschoss gilt immer noch.

Nun, ein paar Fragen:

  1. Ist das überhaupt möglich?
  2. Geht man von (1) Pässen aus, was hältst du für die beste Architektur dafür? Sehen Sie die erste Kugel nach, was ich programmiert habe.
  3. Kann mir jemand vielleicht ein paar Quartz-Methoden geben, die mir helfen, die Datenbank abzufragen, damit Jobs ausgeführt werden können, sobald sie bereits geplant sind?

Es wird ein Kopfgeld für diese Frage geben, sobald es dazu berechtigt ist. Wenn die Frage vorher zufriedenstellend beantwortet wird, werde ich das Kopfgeld immer noch dem Plakat der Antwort zuerkennen. Also, auf jeden Fall, wenn Sie hier eine gute Antwort geben, bekommen Sie eine Prämie.

    
Phillip Schmidt 30.05.2012, 21:33
quelle

1 Antwort

25

Ich werde versuchen, Ihre Fragen in der Reihenfolge zu beantworten, in der Sie sie haben.

  1. Ja, das ist möglich. Es ist eigentlich eine übliche Art, mit Quartz.Net zu arbeiten. Sie können auch eine ASP.Net MVC-Anwendung schreiben, die Quartz.Net-Scheduler verwaltet.

  2. Architektur. Im Idealfall und auf hoher Ebene verwendet Ihre MVC-Anwendung die Quartz.Net-API, um mit einem Quartz.Net-Server zu kommunizieren, der als Windows-Dienst irgendwo installiert ist. Quartz.Net verwendet Remoting, um remote zu kommunizieren, so dass alle Einschränkungen der Verwendung von Remoting gelten (wie es in Silverlight nicht unterstützt wird, usw.). Quartz.Net bietet eine Möglichkeit, es als Windows-Dienst sofort zu installieren. Es gibt also nicht viel zu tun, außer dass der Dienst selbst so konfiguriert wird, dass er (in Ihrem Fall) einen AdoJobStore verwendet und aktiviert Remoting. Es gibt einige Vorsichtsmaßnahmen, die bei der ordnungsgemäßen Installation des Dienstes zu beachten sind. Wenn Sie dies noch nicht getan haben, werfen Sie einen Blick auf in diesem Post .

Intern möchten Sie in Ihrer MVC-Anwendung einen Verweis auf den Scheduler erhalten und ihn als Singleton speichern. Dann planen Sie in Ihrem Code Jobs und erhalten Informationen über den Scheduler über diese einzigartige Instanz. Sie könnten etwas wie folgt verwenden:

%Vor%

Dieser Code richtet Ihren Quart.Net-Client ein. Um dann auf den Remote-Scheduler zuzugreifen, rufen Sie einfach

auf %Vor%
  1. Abfrage Hier ist ein Beispielcode, um alle Jobs vom Scheduler zu bekommen:

    %Vor%

Sie können diesen Code auf Github

sehen     
jvilalta 31.05.2012, 21:10
quelle