Was macht convex-cron-jobs?
Geplante Funktionsmuster für Hintergrundaufgaben, einschließlich Intervallplanung, Cron-Ausdrücke, Job-Überwachung, Wiederholungsstrategien und bewährte Verfahren für langlebige Aufgaben.
Übersicht
Diese Fähigkeit enthält wiederverwendbare Muster und Richtlinien zur Implementierung von geplanten Hintergrundaufgaben in Convex. Sie deckt alles von einfacher Intervallplanung bis hin zu komplexen Cron-Ausdrücken, Überwachung und Wiederholungsstrategien ab.
Kernkonzepte
Intervallplanung
Verwenden Sie cron.interval() für wiederkehrende Aufgaben mit festem Abstand. Ideal für regelmäßige Wartungsarbeiten wie Datenbereinigung, Cache-Aktualisierung oder periodische Berichte.
Cron-Ausdrücke
Nutzen Sie cron.cron() für komplexere Zeitpläne mit standardmäßigen Cron-Ausdrücken. Unterstützt erweiterte Muster wie „jeden Werktag um 9 Uhr“ oder „am ersten Tag jedes Monats“.
Job-Überwachung
Implementieren Sie Protokollierung und Überwachung, um die Ausführung geplanter Aufgaben zu verfolgen. Verfolgen Sie Erfolgsraten, Ausführungsdauer und Fehlermuster.
Wiederholungsstrategien
Konfigurieren Sie automatische Wiederholungen mit exponentieller Backoff- oder fester Verzögerung für fehlgeschlagene Aufgaben. Definieren Sie maximale Wiederholungsversuche und geben Sie Aufgabentyp-spezifische Wiederholungslogik an.
Bewährte Verfahren für langlebige Aufgaben
Optimieren Sie Aufgaben, die länger als das Standard-Timeout ausgeführt werden. Unterteilen Sie große Aufgaben in kleinere Schritte, verwenden Sie Batches und erwägen Sie eine asynchrone Verarbeitung.
Verwendung
Diese Muster können in jedem Convex-Projekt implementiert werden. Die bereitgestellten Beispiele zeigen, wie Sie verschiedene Arten von geplanten Aufgaben definieren, die Ausführung überwachen und Fehler behandeln.
Beispiele
Einfache Intervallaufgabe
import { cron } from 'convex/server';
cron.interval('cache-aktualisierung', { minutes: 30 }, async (ctx) => {
await ctx.db.system.set('cache', { aktualisiertAm: new Date() });
console.log('Cache aktualisiert');
});
Cron-basierte Aufgabe
cron.cron('taeglicher-bericht', '0 9 * * 1-5', async (ctx) => {
const daten = await ctx.db.query('transaktionen').collect();
await generiereBericht(ctx, daten);
});
Überwachung und Wiederholung
cron.interval('daten-synchronisierung', { hours: 1 }, async (ctx) => {
const startZeit = Date.now();
try {
await syncDaten(ctx);
const dauer = Date.now() - startZeit;
await ctx.db.insert('job_logs', {
aufgabe: 'daten-synchronisierung',
status: 'erfolg',
dauerMs: dauer
});
} catch (fehler) {
console.error('Synchronisation fehlgeschlagen:', fehler);
}
});
Ressourcen
- Convex Cron Jobs Dokumentation (Platzhalter-URL)
- Cron Ausdrucksgenerator (externe Referenz)