Workflowtoepassingen implementeren met Temporal in Go: Een complete gids
Bouw workflows in Go met de Temporal SDK
Temporal is een open-source workflow-engine op enterprise-niveau die ontwikkelaars in staat stelt duurzame, schaalbare en fouttolerante workflow-applicaties te bouwen met behulp van bekende programmeertalen zoals Go.
En gedistribueerde applicaties met complexe staatstransities en herpogingen vereisen een betrouwbare orchestratie-framework.
In deze gids wordt uitgelegd hoe je workflow-applicaties implementeert met Temporal in Go, inclusief configuratie, voorbeeldcode, implementatiestrategieën, best practices en probleemoplossing.

Wat is Temporal en waarom gebruiken we het met Go
Temporal is een workflow-orchestratie-framework ontworpen voor het bouwen van fouttolerante, langlopende gedistribueerde applicaties. Temporal beheert status, herpogingen, timers en herstel na falen op de achtergrond, zodat ontwikkelaars zich kunnen concentreren op de applicatielogica zonder boilerplate-orchestratiecode. Het ondersteunt Go, naast andere talen, via de Temporal Go SDK.
Door Temporal met Go te gebruiken:
- Workflows zijn duurzaam en opnieuw afspeelbaar (replayable).
- Activiteitsherpoogingen en time-outs worden automatisch afgehandeld.
- Systeemstatus blijft behouden bij fouten.
- Orchestratielogica voor taken blijft in idiomatische Go-code.
Kernconcepten: Workflows, Activities, Workers
Voordat je je eerste Temporal Go-applicatie bouwt, moet je deze kernconcepten begrijpen:
Workflows
Een Workflow is duurzame coördinatielogica die activiteiten aanroept. Deze moet deterministisch zijn – de Temporal-engine kan deze betrouwbaar opnieuw afspelen. In Go zijn workflows reguliere Go-functies met een speciale workflow.Context-parameter.
Activities
Activities zijn de eenheden van werk die niet-deterministische operaties bevatten (I/O, externe API-aanroepen). Activities worden buiten de workflow uitgevoerd en keren resultaten terug naar de workflow-logica.
Workers
Een Worker host en voert Workflow- en Activity-functies uit. Workers poll de taakwachtrij van de Temporal-server en verwerken taken. Ze moeten workflows en activities registreren voordat ze starten.
Task Queues
Een Task Queue is hoe een worker taken ontvangt van de Temporal-server. Workflows en activities specificeren de naam van de taakwachtrij die ze zullen gebruiken.
Je Go-project instellen met Temporal
Vereisten
- Go (1.16+)
- Temporal Server (lokaal of cloud)
- Docker (voor lokale server)
go.temporal.io/sdkafhankelijkheid
Temporal Go SDK installeren
go get go.temporal.io/sdk
Start de Temporal development server
Voor lokale ontwikkeling:
docker run -d --network host temporalio/temporal-server
Of gebruik de Temporal CLI:
temporal server start-dev
Hiermee start je standaard de Temporal-server en de Web UI.
Configuratie: Clients & Task Queues
Maak een Temporal Client
c, err := client.NewClient(client.Options{
HostPort: "localhost:7233",
})
if err != nil {
log.Fatal(err)
}
defer c.Close()
Kies een Task Queue
Definieer een unieke taakwachtrij voor je worker:
const TaskQueue = "order-processing-queue"
Workers en workflow-initiatoren moeten dezelfde taakwachtrijnaam gebruiken.
Go-voorbeelden: Workflows en Activities
Definieer een eenvoudige Workflow
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
}
Definieer een Activity
func SampleActivity(ctx context.Context, message string) (string, error) {
return fmt.Sprintf("Hello %s!", message), nil
}
Registreer en start de Worker
w := worker.New(c, TaskQueue, worker.Options{})
w.RegisterWorkflow(SampleWorkflow)
w.RegisterActivity(SampleActivity)
err = w.Start()
if err != nil {
log.Fatal(err)
}
Start Workflow-uitvoering
we, err := c.ExecuteWorkflow(context.Background(), client.StartWorkflowOptions{
ID: "sample-workflow-id",
TaskQueue: TaskQueue,
}, SampleWorkflow, "Developer")
Implementeren van Temporal en Go Workers
Opties voor productie-implementatie
- Zelf-gehoste Temporal Cluster: Zet Temporal-services (frontend, history, matching) op met persistente opslag (Cassandra, MySQL).
- Temporal Cloud: Beheerde Temporal-service met SLA en schaalbaarheid.
- Docker Compose of Kubernetes: Voor staging- of productieomgevingen.
Zorg ervoor dat je het volgende configureert:
- Persistentielaag
- Namespace-instelling
- TLS/veilige authenticatie (API-sleutels, mTLS)
Worker Schaalbaarheid
Implementeer meerdere workers achter een load balancer. Workers schalen horizontaal door deel te nemen aan dezelfde taakwachtrijen en de werklast te delen.
Testen van Workflows en Activities in Go
Temporal bevat een testsuite:
testSuite := testsuite.WorkflowTestSuite{}
env := testSuite.NewTestWorkflowEnvironment()
env.RegisterWorkflow(SampleWorkflow)
env.RegisterActivity(SampleActivity)
env.ExecuteWorkflow(SampleWorkflow, "Tester")
Verifieer resultaten:
var result string
require.NoError(t, workflowRun.Get(context.Background(), &result))
require.Equal(t, "Hello Tester!", result)
Testen met testsuites zorgt voor determinisme en betrouwbaarheid van workflow-code voordat deze wordt geïmplementeerd. Voor de Go-services die Tenporal-activities ondersteunen – met name die met herpogingslussen, context-timeouts en timer-gestuurde logica – Concurrente Go-code testen met testing/synctest behandelt hoe je die tijdafhankelijke gedragingen geïsoleerd kunt unit-testen met behulp van nep-klokken en geïsoleerde bubbles.
Best Practices voor Productie
- Time-outs & Herpogingsbeleid: Definieer zinvolle time-outs en herpogingen voor activities en workflows.
- Gestructureerde Logging: Log met trace-IDs en correlatiemetadata.
- Workflow-IDs: Gebruik betekenisvolle workflow-IDs voor traceerbaarheid.
- Child Workflows & ContinueAsNew: Verdeel complexe logica in modulaire uitvoeringen om de geschiedenisgrootte te verkleinen.
- Metrics & Monitoring: Integreer met Prometheus of andere observability-tools.
- Betrouwbare gebeurtenispublicatie vanuit activities: Wanneer een activity naar een database schrijft en ook een andere service moet informeren, gebruik dan het transactionele outbox-patroon om te garanderen dat de gebeurtenis niet verloren gaat tussen de database-commit en het broker-publiceren.
Veelvoorkomende problemen oplossen
Worker Pollt Niet
- Zorg voor de juiste taakwachtrijnaam.
- Bevestig netwerkconnectiviteit naar de Temporal-server.
Workflow Start Niet
- Valideer workflowregistratie voordat de worker start.
- Bevestig client-verbindingparameters.
Activiteiten Falen
- Controleer de configuratie van het herpogingsbeleid.
- Bekijk de Web UI voor foutstacktraces.
Niet-deterministische Workflow-fouten
Temporal handhaaft deterministische workflow-uitvoering. Controleer de code op:
- Gebruik van
math/rand
- Goroutines binnen workflow-logica
- Externe systeemoproepen binnen workflows
Zorg altijd dat workflows zuivere orchestratiecode zijn en roep externe systemen aan via activities.
Het implementeren van workflow-applicaties met Temporal in Go stelt je in staat stateful, veerkrachtige en schaalbare businesslogic te bouwen met behulp van bekende Go-idiomen. Met het gegarandeerde uitvoeringsmodel van Temporal, ingebouwde herpogingen, taakwachtrijen en observability-ondersteuning, kun je je concentreren op je kernapplicatielogica zonder orchestratie opnieuw uit te vinden. Begin met eenvoudige workflows en activities, en schaal met vertrouwen naar complexe, gedistribueerde orchestratie.
Nuttige links
- Polling Agents in AI Assistants: 11 Implementation Patterns — hoe duurzame workflow-engines zoals Temporal passen in productie AI-assistant backends, naast schedulers, queue workers en semantisch polling
- Go Cheatsheet
- Apache Airflow voor MLOPS en ETL - Beschrijving, Voordelen en Voorbeelden
- 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