Mise en œuvre d’applications de flux de travail avec Temporal en Go : un guide complet
Créez des workflows en Go avec le SDK Temporal
Temporal est un moteur de flux de travail (workflow) open source de qualité entreprise qui permet aux développeurs de créer des applications de workflow durables, évolutives et tolérantes aux pannes en utilisant des langages de programmation courants comme Go.
Les applications distribuées avec des transitions d’état complexes et des mécanismes de nouvelle tentative nécessitent un framework d’orchestration fiable.
Ce guide explique comment implémenter des applications de workflow avec Temporal en Go, couvrant la configuration, des exemples de code, les stratégies de déploiement, les bonnes pratiques et le dépannage.

Qu’est-ce que Temporal et pourquoi l’utiliser avec Go
Temporal est un framework d’orchestration de workflow conçu pour construire des applications distribuées à long terme et tolérantes aux pannes. Temporal gère l’état, les nouvelles tentatives, les minuteries et la récupération après erreur en coulisses, permettant aux développeurs de se concentrer sur la logique de l’application sans écrire de code d’orchestration répétitif. Il prend en charge Go, entre autres langages, via le SDK Go de Temporal.
En utilisant Temporal avec Go :
- Les workflows sont durables et rejouables.
- Les nouvelles tentatives et les délais d’expiration des activités sont gérés automatiquement.
- L’état du système persiste à travers les pannes.
- La logique d’orchestration des tâches réside dans un code Go idiomatique.
Concepts fondamentaux : Workflows, Activités, Workers
Avant de construire votre première application Temporal en Go, comprennez ces concepts clés :
Workflows
Un Workflow est une logique de coordination durable qui invoque des activités. Il doit être déterministe : le moteur Temporal peut le rejouer de manière fiable. En Go, les workflows sont des fonctions Go régulières avec un paramètre spécial workflow.Context.
Activités
Les Activités sont les unités de travail qui contiennent des opérations non déterministes (E/S, appels d’API externes). Les activités s’exécutent en dehors du workflow et renvoient les résultats à la logique du workflow.
Workers
Un Worker héberge et exécute les fonctions de Workflow et d’Activité. Les workers interrogent les files d’attente de tâches du serveur Temporal et traitent les tâches. Ils doivent enregistrer les workflows et les activités avant de démarrer.
Files d’attente de tâches
Une File d’attente de tâches est le moyen par lequel un worker reçoit des tâches du serveur Temporal. Les workflows et les activités spécifient le nom de la file d’attente de tâches qu’ils utiliseront.
Configuration de votre projet Go avec Temporal
Prérequis
- Go (1.16+)
- Serveur Temporal (local ou cloud)
- Docker (pour le serveur local)
- Dépendance
go.temporal.io/sdk
Installation du SDK Go de Temporal
go get go.temporal.io/sdk
Démarrage du serveur de développement Temporal
Pour le développement local :
docker run -d --network host temporalio/temporal-server
Ou utilisez l’interface en ligne de commande (CLI) Temporal :
temporal server start-dev
Cela démarre le serveur Temporal et l’interface Web par défaut.
Configuration : Clients et Files d’attente de tâches
Création d’un client Temporal
c, err := client.NewClient(client.Options{
HostPort: "localhost:7233",
})
if err != nil {
log.Fatal(err)
}
defer c.Close()
Choix d’une file d’attente de tâches
Définissez une file d’attente de tâches unique pour votre worker :
const TaskQueue = "order-processing-queue"
Les workers et les initiateurs de workflow doivent utiliser le même nom de file d’attente de tâches.
Exemples Go : Workflows et Activités
Définition d’un workflow simple
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
}
Définition d’une activité
func SampleActivity(ctx context.Context, message string) (string, error) {
return fmt.Sprintf("Hello %s!", message), nil
}
Enregistrement et exécution du worker
w := worker.New(c, TaskQueue, worker.Options{})
w.RegisterWorkflow(SampleWorkflow)
w.RegisterActivity(SampleActivity)
err = w.Start()
if err != nil {
log.Fatal(err)
}
Démarrage de l’exécution du workflow
we, err := c.ExecuteWorkflow(context.Background(), client.StartWorkflowOptions{
ID: "sample-workflow-id",
TaskQueue: TaskQueue,
}, SampleWorkflow, "Developer")
Déploiement de Temporal et des workers Go
Options de déploiement en production
- Cluster Temporal auto-hébergé : Configurez les services Temporal (frontend, history, matching) avec un stockage persistant (Cassandra, MySQL).
- Temporal Cloud : Service Temporal géré avec SLA et mise à l’échelle.
- Docker Compose ou Kubernetes : Pour les environnements de préproduction ou de production.
Assurez-vous de configurer :
- La couche de persistance
- La configuration des espaces de noms (namespace)
- L’authentification TLS/sécurisée (clés API, mTLS)
Évolutivité des workers
Déployez plusieurs workers derrière un équilibreur de charge. Les workers montent en charge horizontalement en rejoignant les mêmes files d’attente de tâches et en partageant la charge de travail.
Tests des workflows et activités en Go
Temporal comprend une suite de tests :
testSuite := testsuite.WorkflowTestSuite{}
env := testSuite.NewTestWorkflowEnvironment()
env.RegisterWorkflow(SampleWorkflow)
env.RegisterActivity(SampleActivity)
env.ExecuteWorkflow(SampleWorkflow, "Tester")
Vérification des résultats :
var result string
require.NoError(t, workflowRun.Get(context.Background(), &result))
require.Equal(t, "Hello Tester!", result)
Les tests avec des suites de tests garantissent le déterminisme et la fiabilité du code du workflow avant le déploiement. Pour les services Go qui sous-tendent les activités Temporal — en particulier ceux avec des boucles de nouvelle tentative, des délais de contexte et une logique pilotée par minuterie — Tester le code Go concurrent avec testing/synctest explique comment tester cette dépendance au temps de manière isolée en utilisant des horloges fictives et des bulles isolées.
Bonnes pratiques pour la production
- Délais d’expiration et politiques de nouvelle tentative : Définissez des délais et des nouvelles tentatives raisonnables pour les activités et les workflows.
- Journalisation structurée : Émettez des journaux avec des identifiants de trace et des métadonnées de corrélation.
- Identifiants de workflow : Utilisez des identifiants de workflow significatifs pour la traçabilité.
- Workflows enfants et ContinueAsNew : Décomposez la logique complexe en exécutions modulaires pour réduire la taille de l’historique.
- Métriques et surveillance : Intégrez-vous avec Prometheus ou d’autres outils d’observabilité.
- Publication fiable d’événements depuis les activités : Lorsqu’une activité écrit dans une base de données et doit également notifier un autre service, utilisez le motif de boîte de sortie transactionnelle pour garantir que l’événement n’est pas perdu entre l’engagement de la base de données et la publication du courtier.
Dépannage des problèmes courants
Worker ne pollant pas
- Assurez-vous d’utiliser le nom de file d’attente de tâches correct.
- Confirmez la connectivité réseau au serveur Temporal.
Échec du démarrage du workflow
- Validez l’enregistrement du workflow avant le démarrage du worker.
- Confirmez les paramètres de connexion du client.
Échecs d’activité
- Vérifiez la configuration de la politique de nouvelle tentative.
- Examinez l’interface Web pour les traces de pile d’erreurs.
Erreurs de workflow non déterministe
Temporal impose une exécution déterministe du workflow. Examinez le code pour :
- L’utilisation de
math/rand - Les goroutines à l’intérieur de la logique du workflow
- Les appels de système externe à l’intérieur des workflows
Assurez-vous toujours que les workflows sont du code d’orchestration pur tandis que les systèmes externes sont invoqués via des activités.
L’implémentation d’applications de workflow avec Temporal en Go vous permet de construire une logique métier étatique, résiliente et évolutive en utilisant des idiomes Go familiers. Avec le modèle d’exécution garanti de Temporal, les nouvelles tentatives intégrées, les files d’attente de tâches et le support d’observabilité, vous pouvez vous concentrer sur la logique centrale de votre application sans réinventer l’orchestration. Commencez par des workflows et des activités simples, et évoluez vers une orchestration distribuée complexe en toute confiance.
Liens utiles
- Agents de sondage dans les assistants IA : 11 motifs d’implémentation — comment les moteurs de workflow durables comme Temporal s’intègrent aux backends d’assistants IA de production, aux côtés des planificateurs, des workers de file d’attente et du sondage sémantique
- Référence Go
- Apache Airflow pour MLOPS et ETL - Description, avantages et exemples
- Application principale - SDK Go. Documentation de la plateforme Temporal
- Exemples de SDK Go Temporal
- Construire des workflows fiables avec Temporal en Go - Bonnes pratiques essentielles
- Construire une application Temporal à partir de zéro en Go
- Hub Architecture des Applications — Conception d’API, structure du code et motifs d’intégration