Zum Hauptinhalt springen

Sync- und Hintergrund-Jobs

Zweck

Viele Workflows in SpeamCore laufen asynchron im Backend — sei es periodischer Sync mit externen Systemen, eingehende Webhooks oder rechenintensive Operationen. Die Plattform verwendet BullMQ mit Redis als Job-Queue. Diese Konzept-Seite gibt eine Übersicht über die Job-Familien, ihre Trigger und Fehler-Behandlung — damit du in Modul-Doku nicht jedes Mal das Pattern erklaeren musst.

Job-Familien

1. Cron-Jobs (zeitgesteuert)

Pflege über /cron-jobs. Beispiele:

Lock-Mechanismus: lockedBy + lockedAt verhindert Doppellauf bei Multi-Worker-Setups.

2. Externer Sync

ProviderWas wird synchronisiertFE-Steuerung
finAPIBank-Konten und Bank-TransaktionenTransactionAccounts → finAPI-Modal
PleoKreditkarten-Konten und -TransaktionenTransactionAccounts → Pleo-Modal
Microsoft GraphMails, Mailboxes, Calendar-EventsMail-Konten
ShopifyProdukte, Bestellungen, KundenShopify-Stores
Speambox / MQTTSensor-Daten, Geraete-StatusSpeamboxes, Speambox-System-Types

Sync-Lauf wird typischerweise:

  • per Cron-Job (z. B. alle 15 Min) angestossen,
  • bei Bedarf manuell über UI-Button (z. B. „Sync ausführen" in Categories oder einer Mailbox).

3. Webhook-getriggerte Jobs

Für eingehende Events (z. B. neue Mail von Microsoft Graph, finAPI-Notification, Shopify-Webhook). Ein Webhook-Endpoint legt einen Job in BullMQ; der Worker verarbeitet asynchron.

4. Asynchrone Operationen

5. Notification-Versand

Siehe Notification-System — Events erzeugen Logs und werden über Channels (Mail, Push, MS Teams) verschickt; Versand laeuft in BullMQ.

Status und Fehler-Behandlung

Jeder Job hat:

StatusBedeutung
pendingWartet in der Queue
runningWird gerade ausgeführt
completedErfolgreich beendet
failedFehler — Stack-Trace gespeichert
delayed / pausedBullMQ-spezifische Zustaende

Retry-Logik: BullMQ wiederholt fehlgeschlagene Jobs typischerweise mit Exponential-Backoff. Nach N Fehlversuchen bleibt der Job failed.

Job-Ereignis-Audit: Jobs koennen optional Events in JobActivity oder modul-spezifische Aktivität-Logs schreiben — z. B. DocumentActivity bei Document-Transformationen.

Lock-Mechanismus (Cron-Spezial)

Bei CronJob schreibt der Worker beim Beginn:

  • lockedBy = <workerId>
  • lockedAt = now

Andere Worker, die den Job in ihrer Queue sehen, ueberspringen ihn, solange lockedBy != null. Der Lock wird beim Beenden gelöscht. Bei Worker-Crash bleibt der Lock haengen — manuelle Korrektur über /cron-jobs/:id notwendig.

Berechtigungen

ActionSubjectWirkungKeycloak-Rolle
viewCronJobCron-ListeAPP_SPEAMCORE_VIEW_CRON_JOB
doRunCronJobManuell ausloesenAPP_SPEAMCORE_DO_RUN_CRON_JOB
viewJobActivityJob-Audit-Log einsehenAPP_SPEAMCORE_VIEW_JOB_ACTIVITY
viewFinapiConfig, PleoConfig, ShopifyConfigExterne-Sync-KonfigurationAPP_SPEAMCORE_VIEW_FINAPI_CONFIG, PLEO_CONFIG, SHOPIFY_CONFIG

Wiederverwendbare Konzepte

Verknuepfungen zu Modulen

Versionshinweise

  • 2026-04-30: Initiale Veroeffentlichung als Querschnitts-Konzept.