Workflow-Anwendungen mit Temporal in Go implementieren: Eine vollständige Anleitung
Workflows in Go mit dem Temporal SDK erstellen
Temporal ist ein Open-Source-Workflow-Engine für den Enterprise-Einsatz, die es Entwicklern ermöglicht, langlebige, skalierbare und fehlerresistente Workflow-Anwendungen mit bekannten Programmiersprachen wie Go zu entwickeln.
Verteilte Anwendungen mit komplexen Zustandsübergängen und Wiederholungsversuchen erfordern ein zuverlässiges Orchestrierungs-Framework.
Dieser Leitfaden erläutert, wie man Workflow-Anwendungen mit Temporal in Go implementiert, und behandelt Konfiguration, Beispielcode, Bereitstellungsstrategien, Best Practices und Fehlerbehebung.

Was ist Temporal und warum sollte man es mit Go verwenden
Temporal ist ein Workflow-Orchestrierungs-Framework, das für den Aufbau fehlerresistenter, langlaufender verteilter Anwendungen konzipiert wurde. Temporal verwaltet Zustände, Wiederholungsversuche, Timer und die Fehlerwiederherstellung im Hintergrund, sodass sich Entwickler auf die Anwendungslogik konzentrieren können, ohne Boilerplate-Code für die Orchestrierung schreiben zu müssen. Es unterstützt Go unter anderem über das Temporal Go SDK.
Durch die Verwendung von Temporal mit Go:
- Workflows sind langlebig und wiederholbar (replayable).
- Aktivitäts-Wiederholungsversuche und Timeouts werden automatisch verarbeitet.
- Der Systemzustand bleibt auch bei Ausfällen erhalten.
- Die Logik zur Orchestrierung von Aufgaben befindet sich in idiomatischem Go-Code.
Kernkonzepte: Workflows, Activities, Workers
Bevor Sie Ihre erste Temporal Go-Anwendung erstellen, sollten Sie diese Schlüsselkonzepte verstehen:
Workflows
Ein Workflow ist eine langlebige Koordinierungslogik, die Aktivitäten aufruft. Er muss deterministisch sein – die Temporal-Engine kann ihn zuverlässig wiederholen. In Go sind Workflows reguläre Go-Funktionen mit einem speziellen workflow.Context-Parameter.
Activities
Activities sind die Arbeitseinheiten, die nicht-deterministische Operationen enthalten (I/O, Aufrufe externer APIs). Activities werden außerhalb des Workflows ausgeführt und geben Ergebnisse an die Workflow-Logik zurück.
Workers
Ein Worker hostet und führt Workflow- und Activity-Funktionen aus. Workers abfragen die Task-Queues des Temporal-Servers und verarbeiten Aufgaben. Sie müssen Workflows und Activities registrieren, bevor sie gestartet werden.
Task Queues
Eine Task Queue ist der Mechanismus, über den ein Worker Aufgaben vom Temporal-Server empfängt. Workflows und Activities geben den Namen der Task-Queue an, die sie verwenden werden.
Einrichten Ihres Go-Projekts mit Temporal
Voraussetzungen
- Go (1.16+)
- Temporal Server (lokal oder Cloud)
- Docker (für den lokalen Server)
- Abhängigkeit
go.temporal.io/sdk
Temporal Go SDK installieren
go get go.temporal.io/sdk
Temporal Development Server starten
Für die lokale Entwicklung:
docker run -d --network host temporalio/temporal-server
Oder verwenden Sie die Temporal CLI:
temporal server start-dev
Dies startet standardmäßig den Temporal-Server und die Web-Oberfläche.
Konfiguration: Clients und Task Queues
Einen Temporal-Client erstellen
c, err := client.NewClient(client.Options{
HostPort: "localhost:7233",
})
if err != nil {
log.Fatal(err)
}
defer c.Close()
Eine Task Queue auswählen
Definieren Sie eine eindeutige Task-Queue für Ihren Worker:
const TaskQueue = "order-processing-queue"
Worker und Workflow-Initiatoren müssen denselben Task-Queue-Namen verwenden.
Go-Beispiele: Workflows und Activities
Einen einfachen Workflow definieren
func SampleWorkflow(ctx workflow.Context, input string) (string, error) {
ao := workflow.ActivityOptions{
TaskQueue: TaskQueue,
ScheduleToCloseTimeout: time.Minute,
}
ctx = workflow.WithActivityOptions(ctx, ao)
var result string
err := workflow.ExecuteActivity(ctx, SampleActivity, input).Get(ctx, &result)
if err != nil {
return "", err
}
return result, nil
}
Eine Activity definieren
func SampleActivity(ctx context.Context, message string) (string, error) {
return fmt.Sprintf("Hallo %s!", message), nil
}
Worker registrieren und starten
w := worker.New(c, TaskQueue, worker.Options{})
w.RegisterWorkflow(SampleWorkflow)
w.RegisterActivity(SampleActivity)
err = w.Start()
if err != nil {
log.Fatal(err)
}
Workflow-Ausführung starten
we, err := c.ExecuteWorkflow(context.Background(), client.StartWorkflowOptions{
ID: "sample-workflow-id",
TaskQueue: TaskQueue,
}, SampleWorkflow, "Developer")
Bereitstellen von Temporal und Go-Workern
Optionen für die Produktionsbereitstellung
- Selbst gehosteter Temporal-Cluster: Einrichten von Temporal-Diensten (Frontend, History, Matching) mit persistentem Speicher (Cassandra, MySQL).
- Temporal Cloud: Verwaltet Temporal-Dienst mit SLA und Skalierung.
- Docker Compose oder Kubernetes: Für Staging- oder Produktionsumgebungen.
Stellen Sie sicher, Folgendes zu konfigurieren:
- Persistenzschicht
- Namespace-Einrichtung
- TLS/sichere Authentifizierung (API-Schlüssel, mTLS)
Worker-Skalierbarkeit
Bereitstellen Sie mehrere Worker hinter einem Load Balancer. Worker skalieren horizontal, indem sie denselben Task-Queues beitreten und die Arbeitslast gemeinsam nutzen.
Testen von Workflows und Activities in Go
Temporal enthält einen Test-Suite:
testSuite := testsuite.WorkflowTestSuite{}
env := testSuite.NewTestWorkflowEnvironment()
env.RegisterWorkflow(SampleWorkflow)
env.RegisterActivity(SampleActivity)
env.ExecuteWorkflow(SampleWorkflow, "Tester")
Ergebnisse prüfen:
var result string
require.NoError(t, workflowRun.Get(context.Background(), &result))
require.Equal(t, "Hallo Tester!", result)
Das Testen mit Test-Suites stellt die Deterministik und Zuverlässigkeit des Workflow-Codes vor der Bereitstellung sicher. Für die Go-Dienste, die die Grundlage für Temporal-Activities bilden – insbesondere solche mit Wiederholungsloops, Kontext-Deadlines und timer-gesteuerter Logik – Testen von konkurrenzfähigem Go-Code mit testing/synctest beschreibt, wie man dieses zeitabhängige Verhalten isoliert unter Verwendung von gefälschten Uhren und isolierten Blasen unit-testet.
Best Practices für die Produktion
- Timeouts und Retry-Richtlinien: Definieren Sie sinnvolle Timeouts und Wiederholungsversuche für Activities und Workflows.
- Strukturierte Protokollierung: Geben Sie Logs mit Trace-IDs und Korrelationsmetadaten aus.
- Workflow-IDs: Verwenden Sie aussagekräftige Workflow-IDs zur Nachverfolgbarkeit.
- Child Workflows und ContinueAsNew: Zerlegen Sie komplexe Logik in modulare Ausführungen, um die Historiengröße zu reduzieren.
- Metriken und Überwachung: Integrieren Sie Prometheus oder andere Observability-Tools.
- Zuverlässige Ereignisveröffentlichung aus Activities: Wenn eine Activity in eine Datenbank schreibt und gleichzeitig einen anderen Dienst benachrichtigen muss, verwenden Sie das transaktionale Outbox-Muster, um zu garantieren, dass das Ereignis nicht zwischen dem Datenbank-Commit und dem Broker-Publish verloren geht.
Fehlerbehebung bei häufigen Problemen
Worker fragt nicht ab
- Stellen Sie sicher, dass der richtige Task-Queue-Name verwendet wird.
- Bestätigen Sie die Netzwerkverbindung zum Temporal-Server.
Workflow startet nicht
- Validieren Sie die Workflow-Registrierung vor dem Start des Workers.
- Bestätigen Sie die Client-Verbindungsparameter.
Activity-Fehler
- Überprüfen Sie die Konfiguration der Retry-Richtlinie.
- Untersuchen Sie die Web-Oberfläche auf Fehler-Stack-Traces.
Nicht-deterministische Workflow-Fehler
Temporal erzwingt eine deterministische Workflow-Ausführung. Überprüfen Sie den Code auf:
- Verwendung von
math/rand - Goroutines innerhalb der Workflow-Logik
- Aufrufe externer Systeme innerhalb von Workflows
Stellen Sie immer sicher, dass Workflows reine Orchestrierungs-Code sind, während externe Systeme über Activities aufgerufen werden.
Die Implementierung von Workflow-Anwendungen mit Temporal in Go ermöglicht es Ihnen, zustandsbehaftete, resiliente und skalierbare Geschäftslogik mit bekannten Go-Idiomen aufzubauen. Mit dem garantierten Ausführungsmodell von Temporal, integrierten Wiederholungsversuchen, Task-Queues und Observability-Unterstützung können Sie sich auf Ihre Kernanwendungslogik konzentrieren, ohne die Orchestrierung neu erfinden zu müssen. Beginnen Sie mit einfachen Workflows und Activities und skalieren Sie mit Zuversicht hin zu komplexer, verteilter Orchestrierung.
Nützliche Links
- Polling Agents in AI Assistants: 11 Implementation Patterns — wie langlebige Workflow-Engines wie Temporal in Backend-Systeme für Produktions-KI-Assistenten passen, neben Schedulers, Queue-Workern und semantischem Polling
- Go Cheatsheet
- Apache Airflow für MLOPS und ETL - Beschreibung, Vorteile und Beispiele
- Core application - Go SDK. Temporal Platform Documentation
- Temporal Go SDK samples
- Building Reliable Workflows with Temporal in Go - Essential Best Practices
- Build a Temporal Application from scratch in Go
- App Architecture hub — API design, code structure, and integration patterns