Quarz.com wird aufgefordert, Fehlzündungen zu ignorieren

8

Ich baue einen Windows-Dienst, der eine geplante Aufgabe ausführt, die eine Warteschlange von Befehlen (von einem Altsystem) in einem regelmäßigen Intervall (einmal pro Minute) unter Verwendung von Quartz.net

verarbeitet

Wenn die Aufgabe länger als 1 Minute dauert, was ungewöhnlich wäre, aber unter bestimmten Umständen möglich wäre, würde ich gerne die Auslöser ignorieren, die sie nicht ausgelöst haben.

Aber ich kann nicht scheinen, dass das passiert. Es führt die Verarbeitung durch und zündet dann schnell alle ausgelösten Auslöser in schneller Folge. Wie ich verstehe, können Sie einen Schwellenwert für die Fehlzündungen festlegen, aber ich bin nicht in der Lage, dies zum Funktionieren zu bringen.

Ich verwende [DisallowConcurrentExecution ()] für den Job, um sicherzustellen, dass nur eine Instanz des Jobs gleichzeitig ausgeführt wird.

Im Folgenden finden Sie ein paar Schnipsel. Zuerst einige Config-Informationen übergeben - setzt man so die Fehlzündungsschwelle?

%Vor%

Erstellen eines Triggers mit dem, was ich für die korrekte Einstellung von Ignoriere Fehlzündungen halte:

%Vor%

Gedanken sehr geschätzt.

Code für den Job: Spielen Sie einfach nur mit groben Ideen, also laufen Sie einfach in einer Konsolen-App und geben Sie einen Auftrag nach dem Zufallsprinzip aus, so dass er über das Intervall von 10 Sekunden hinausschießt. Alle gesicherten Fehlzündungen werden nach ein paar Verzögerungen schnell hintereinander ausgelöst.

%Vor%     
Absolutely N 20.05.2015, 19:27
quelle

1 Antwort

13

WithMisfireHandlingInstructionIgnoreMisfires() ist die falsche Methode für das, was Sie wollen, es bedeutet nicht, dass der Job keine Fehlzündungen auslöst. Es bedeutet, dass alle ausgelösten Trigger so schnell wie möglich ausgelöst werden und dann zum normalen Zeitplan zurückkehren. Welches ist was du siehst passiert.

Was Sie brauchen, ist WithMisfireHandlingInstructionNextWithRemainingCount() . Dies signalisiert dem Scheduler, Fehlzündungen zu ignorieren und auf die nächste geplante Zeit zu warten. Fehlzündungsstrategien können ein wenig verwirrend sein, für eine knappe Erklärung schauen Sie hier (es ist für den Java-Scheduler aber es ist egal).

Auch bei der richtigen Strategie müssen Sie verstehen, wie die Fehlzündungsschwelle funktioniert. Wenn Sie einen Fehler bekommen, kann Ihr fehlgeschlagener Trigger dennoch ausgelöst werden.

Aus der Dokumentation: "Eine Fehlzündung ist die Zeitspanne, in der ein Auslöser seine nächste Feuerzeit verfehlt haben muss, damit er als" fehlzündend "betrachtet wird und somit seine Fehlzündungsanweisung angewendet wird".

Sie haben den Wert auf 600000 Millisekunden gesetzt (und dieser Wert gilt für alle Trigger, leider gibt es keinen Schwellenwert pro Trigger) - die Fehlzündungsstrategie wird nur angewendet, wenn Ihr Trigger 600000 Millisekunden auslöst nach der Zeit, die es hätte gefeuert werden sollen. Sie können es gemäß Ihren Anforderungen senken oder erhöhen.

Weitere Informationen zur Fehlzündungsschwelle finden Sie hier .

    
Nick Patsaris 22.05.2015, 15:18
quelle

Tags und Links