So definieren Sie die Häufigkeit der einen job in der Anwendung durch die Nutzer?
Ich habe eine Anwendung, die zum ausführen von jobs repeatingly. Aber (ja, das wäre zu einfach, ohne ein aber...) ich möchte die Benutzer zu definieren, Ihre backup-Häufigkeit in der Anwendung.
In schlimmsten Fall, Sie hätten zu wählen zwischen :
- wöchentlich,
- täglich,
- alle 12 Stunden,
- alle 6 Stunden,
- stündlich
In besten Fall, Sie sollten in der Lage sein, um die crontab-Ausdrücke (siehe Dokumentation zum Beispiel)
Wie dies zu tun? Starte ich einen job, jeder Minute, dass der check für die Letzte Ausführung-Zeit, Frequenz und startet dann einen anderen job, wenn nötig? Erstelle ich eine Art Warteschlange, wird ausgeführt durch einen masterjob?
Irgendwelche Hinweise, Ideen, Meinungen, best-pratices, Erfahrungen sind willkommen!
EDIT : Gelöst, das problem mit Hilfe von Akka-scheduler. Ok, das ist eine technische Lösung, die nicht ein design-Antwort, aber trotzdem funktioniert alles Super.
Jeden Benutzer definiert, die Wiederholung ist ein Schauspieler, der das senden von Nachrichten jeder Zeit an einen neuen Schauspieler zu führen der eigentliche job.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Möglicherweise gibt es zwei Möglichkeiten, dies zu tun, je nach Ihren Anforderungen/Architektur:
Wenn Sie können nur Spielen:
Natürlich die crons von den Nutzern nicht zu präzise, als Sie für Ihre eigenen cron-Verzögerungen plus Ausführung Verzögerungen auf, die alle Aufgaben in der Warteschlange, die der Reihe nach laufen. Nicht die beste Lösung, es sei denn, Sie irgendwie verbieten crons laufen die jede Sekunde oder häufiger als jede minute (um sicher zu sein). Doing eine Prüfung am Zeitpunkt der Ausführung des crons, um Sie zu töten, wenn Sie über eine gewisse Zeit eine gute Idee wäre.
Wenn du mehr als nur Spielen:
Die bessere alternative, die ich glaube, ist die Verwendung von Quarz (siehe diese) zu erstellen, die eine spätere Ausführung, wenn der Benutzer erstellt den job, und reproram es einmal die Ausführung ist vorbei.
Gab es eine Diskussion über google-groups über es. Soweit ich mich erinnere müssen Sie einen job definieren, die starten alle 6 Stunden und prüfen Sie, welche sicherungen erledigt werden muss. So müssen Sie sich erinnern, Wann der Letzte backup-job fertig war und machen die Steuerung selbst. Ich bin mir nicht sicher, ob Quarz behandeln kann wie eine Forderung.
Blickte ich in den source-code (immer eine gute Quelle ;-)) und eine Methode gefunden, alle, wo ich denke, das sollte tun, was Sie wollen. Wie auch immer, ich bin nicht sicher, ob dies ist ein cleveres design, denn wenn Sie haben 1000 Benutzer haben Sie dann 1000 Arbeitsplätze. Ich bin mir nicht sicher, wenn ein Spiel erstellt wurde, um solche eine große Anzahl von Arbeitsplätzen.
[Update] Für cron-Ausdrücke sollten Sie einen Blick in
JobPlugin.scheduleForCRON()
JobPlugin.scheduleForCRON()
direkt, aber es sollte möglich sein, übertragen Sie den code für Ihre Anwendung.Es gibt mehrere Möglichkeiten, um dieses Problem zu lösen.
Wenn Sie nicht haben, eine wirklich große Last von jobs, ich würde nur bestehen diese in eine Tabelle mit der benötigten Flexibilität. Überprüfen Sie dann alle von Ihnen jede Stunde (oder der niedrigsten Intervall-support) und führen Wahlberechtigten. Einfach.
Oder, wenn Sie lieber cron-syntax sowieso, nur schreiben (export -) Aufträge, die eine Benutzer-crontab mit einem wrapper, der ruft zurück, um Ihre laufende app, oder beginnt die Arbeit in einem eigenständigen Prozess, wenn das möglich ist.