Elixir
periodical
Ein begrenzter Scheduler im Speicher für wiederkehrende und einmalige Callbacks innerhalb einer BEAM-Instanz, mit Regeln für Überlappung und verpasste Termine, Pause, Abbruch und Telemetrie.
Absicht
Zeitpläne sind Ephemeris-Regeln, ein Intervall wird also als RRULE oder als einfacher Satz geschrieben und bedeutet in beiden Fällen dasselbe. Alles andere bleibt mit Absicht lokal und begrenzt: Zeitpläne verschwinden mit der Instanz, und jede Replik führt ihre eigenen aus. Arbeit, die dauerhaft sein oder clusterweit genau einmal laufen muss, reicht der Callback an eine Warteschlange weiter, die dafür gebaut ist.
Beispiel
defmodule MyApp.Cleanup do
def run(%Periodical.Trigger{} = trigger, scope) do
MyApp.Log.cleanup_started(trigger.schedule_id, scope)
:ok
end
end
{:ok, schedule_id} =
Periodical.every("FREQ=MINUTELY;INTERVAL=5", MyApp.Cleanup, :run, [:expired_sessions])Installation
{:periodical, "~> 0.1"}