inngest/inngest-durable-functions

Verwenden Sie diese Funktion beim Erstellen von Funktionen, die Prozessabstürze überstehen, bei Fehlern automatisch wiederholt werden, nach einem Zeitplan ausgeführt werden, auf Ereignisse reagieren oder den Zustand über Infrastrukturausfälle hinweg bewahren müssen – z. B. Webhook-Handler, die Ereignisse verlieren, unzuverlässige Cron-Jobs, Hintergrundjobs, die mitten in der Ausführung fehlschlagen, oder Workflows, die dort weitermachen müssen, wo sie aufgehört haben. Umfasst Inngest-Funktionskonfiguration, Auslöser (Ereignisse, Cron, Aufruf), Schrittausführung und Memoisierung, Idempotenz, Abbruch, Fehlerbehandlung, Wiederholungen, Protokollierung und Beobachtbarkeit.

Was ist inngest-durable-functions?

Diese Fähigkeit, basierend auf Inngest, ermöglicht es AI-Agenten, hochzuverlässige durable Functions zu definieren und zu verwalten. Im Gegensatz zu regulären serverlosen Funktionen garantieren durable Functions die Ausführung selbst bei Prozessabstürzen, Netzwerkproblemen oder anderen Infrastrukturfehlern. Die Hauptmerkmale umfassen die Unterstützung von ereignisgesteuerten Auslösern (z. B. Webhooks, Cron-Zeitpläne), die schrittweise Ausführung mit automatischer Wiederherstellung des Zustands (Memoisierung) und die Konfiguration von Wiederholungs- und Fehlerbehandlungsstrategien. Darüber hinaus können Entwickler Idempotenz über eindeutige Schlüssel sicherstellen, Abbruchmechanismen implementieren und die Funktionen in Frameworks wie Next.js, Remix, Express (TypeScript/JavaScript) und Python integrieren. Die Fähigkeit deckt auch erweiterte Funktionen wie Logging und Observability ab, was sie ideal für geschäftskritische Workflows wie Zahlungsabwicklung, Datenverarbeitungs-Pipelines und lang laufende Aufgaben macht.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/inngest/inngest-skills/tree/main/skills/inngest-durable-functions

Installed? Explore more Produktivität & Zusammenarbeit skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Was macht inngest-durable-functions?

Verwenden Sie diese Fähigkeit beim Erstellen von Funktionen, die Prozessabstürze überstehen, bei Fehlern automatisch wiederholt werden, nach einem Zeitplan ausgeführt werden, auf Ereignisse reagieren oder den Zustand über Infrastrukturausfälle hinweg bewahren müssen – z. B. Webhook-Handler, die Ereignisse verlieren, unzuverlässige Cron-Jobs, Hintergrundjobs, die mitten in der Ausführung fehlschlagen, oder Workflows, die dort weitermachen müssen, wo sie aufgehört haben. Umfasst Inngest-Funktionskonfiguration, Auslöser (Ereignisse, Cron, Aufruf), Schrittausführung und Memoisierung, Idempotenz, Abbruch, Fehlerbehandlung, Wiederholungen, Protokollierung und Beobachtbarkeit.

Einführung in durable Functions

Inngest ist eine Plattform für durable Functions – das sind serverlose Funktionen, die gegen jede Art von Fehler resistent sind und den Zustand über Schritte hinweg speichern. Jede Funktion reagiert auf ein Ereignis, einen Cron-Zeitplan oder einen Aufruf und besteht aus mehreren Schritten. Die Zustände der Schritte werden automatisch im Inngest-System gespeichert, sodass die Ausführung selbst nach einem Neustart des Prozesses präzise dort fortgesetzt werden kann, wo sie aufgehört hat.

Hauptkonzepte

Funktionen definieren

Funktionen werden mit inngest.createFunction() definiert:

import { inngest } from "@/lib/inngest";

export const myFunction = inngest.createFunction(
  { id: "mein-funktion-name" },
  { event: "benutzer/registriert" },
  async ({ event, step }) => {
    // Ihre Logik hier
  }
);

Auslöser

Funktionen können auf verschiedene Weise ausgelöst werden:

  • Ereignisse: Wird ausgelöst, wenn ein bestimmtes Ereignis gesendet wird ({ event: "app/ereignis.art" }).
  • Cron: Wird nach einem Zeitplan ausgelöst ({ cron: "0 0 * * *" }).
  • Aufruf: Wird programmatisch über die Inngest-API ausgelöst ({ invoke: "meine-funktion" }).

Schrittausführung und Memoisierung

Jeder Schritt in einer Funktion wird mit step.run() definiert. Das System merkt sich den Rückgabewert eines Schritts, sodass bei einer Wiederholung der Schritt nicht erneut ausgeführt wird.

const benutzer = await step.run("benutzer-abrufen", async () => {
  const response = await fetch(`https://api.ihreservice.com/benutzer/${event.data.benutzerId}`);
  return response.json();
});

const aktualisiert = await step.run("benutzer-aktualisieren", async () => {
  // Dieser Schritt verwendet den gemerkten benutzer-Wert
  return await updateUser(event.data.benutzerId, { status: "aktiv" });
});

Idempotenz

Stellen Sie Idempotenz mit der Option idempotencyKey sicher:

export const zahlungVerarbeiten = inngest.createFunction(
  {
    id: "zahlung-verarbeiten",
    idempotencyKey: `zahlung-${event.data.transaktionsId}`,
  },
  { event: "zahlung/erstellt" },
  async ({ event, step }) => {
    // Diese Funktion führt nur einmal pro transaktionsId aus
  }
);

Wiederholungen und Fehlerbehandlung

Konfigurieren Sie das Wiederholungsverhalten und behandeln Sie Fehler:

export const unzuverlaessigerJob = inngest.createFunction(
  {
    id: "unzuverlaessiger-job",
    retries: { maxAttempts: 5, backoff: "exponential" },
  },
  { event: "job/ausfuehren" },
  async ({ event, step }) => {
    try {
      await step.run("riskante-operation", async () => {
        // Code, der fehlschlagen könnte
      });
    } catch (fehler) {
      await step.run("fehler-melden", async () => {
        // Fehler melden, aber Funktion nicht neu werfen
      });
    }
  }
);

Abbruch

Brechen Sie eine laufende Funktion ab mit:

export const stornierbareBestellung = inngest.createFunction(
  {
    id: "bestellung-verarbeiten",
    cancelOn: [
      {
        event: "bestellung/storniert",
        match: "data.bestellNr",
      },
    ],
  },
  { event: "bestellung/erstellt" },
  async ({ event, step }) => {
    // Diese Funktion wird abgebrochen, wenn ein passendes Storno-Ereignis eintrifft
  }
);

Integrationen

Inngest funktioniert nahtlos mit:

  • Next.js (App Router und Pages Router)
  • Remix
  • Express
  • Python (FastAPI, Flask, Django)
  • TypeScript/JavaScript (jedes Node.js-Framework)

Logging und Beobachtbarkeit

Verwenden Sie step.run() für Logging und integrieren Sie mit gängigen Observability-Tools:

export const datenPipeline = inngest.createFunction(
  { id: "daten-verarbeiten" },
  { cron: "*/5 * * * *" },
  async ({ event, step, logger }) => {
    logger.info("Datenverarbeitung gestartet");
    
    const daten = await step.run("daten-abrufen", async () => {
      // Externe API abfragen
    });
    
    logger.info(`Empfangene ${daten.length} Datensätze`);
    
    await step.run("daten-speichern", async () => {
      // In Datenbank speichern
    });
  }
);

Best Practices

  1. Verwenden Sie aussagekräftige Schrittnamen – sie erscheinen im Dashboard und in Logs.
  2. Jeder step.run()-Aufruf muss auf oberster Ebene sein – nicht in if-/try-/for-Blöcke eingeschlossen, sondern immer auf der obersten Ausführungsebene der Funktion.
  3. Halten Sie Schritte klein und atomar – jeder Schritt sollte eine einzelne Operation sein (DB-Schreiben, API-Aufruf).
  4. Verwenden Sie Idempotenz für zustandsverändernde Operationen – insbesondere bei Zahlungen oder anderen kritischen Aktionen.
  5. Konfigurieren Sie Wiederholungen mit Bedacht – nutzen Sie exponentielles Backoff für fehleranfällige Operationen.
  6. Protokollieren Sie wichtige Schritte – hilft beim Debuggen und Überwachen des Systemzustands.

Nützliche Links

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

inngest/inngest-events

Use when designing event-driven workflows, decoupling services, implementing fan-out patterns (one trigger, many downstream handlers), implementing idempotent event handling with IDs (24-hour dedupe window), or handling at-least-once delivery from external sources like Stripe webhooks. Covers Inngest event schema, payload format, naming conventions, IDs for idempotency, the ts param, fan-out patterns, and system events like inngest/function.failed.

inngest/inngest-middleware

Use when adding cross-cutting concerns to durable functions — structured logging or tracing across all functions, error tracking with Sentry, payload encryption for sensitive data, dependency injection of clients (DB, Stripe, etc.) into function handlers, custom telemetry, or behavior that should apply uniformly across many functions. Covers Inngest middleware lifecycle, creating custom middleware, dependencyInjectionMiddleware, @inngest/middleware-encryption, @inngest/middleware-sentry, and custom middleware patterns.

inngest/inngest-setup

Use when adding durable execution to a TypeScript project — building retry-safe webhook handlers, background jobs that survive crashes, scheduled tasks, or long-running workflows that outlive a single request. Covers Inngest SDK installation, client config, environment variables, serve endpoints (Next.js, Express, Hono, Fastify), connect-as-worker mode, and the local dev server.

inngest/inngest-steps

Use when implementing delays that must survive process restarts (e.g., 24-hour cart abandonment, scheduled follow-ups), waiting for human approval or external events with timeouts (review gates, webhook callbacks, async API completion), polling external services without losing state on crashes, calling other functions and awaiting their results, memoizing expensive operations so they don't re-run on retry, or running async work in parallel inside a workflow. Covers Inngest step methods: step.run, step.sleep, step.waitForEvent, step.waitForSignal, step.sendEvent, step.invoke, step.ai, plus patterns for loops and parallel execution.

Verwandte Skills