Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Utilizzando il Durable Task SDK for Go, puoi definire orchestrazioni, attività ed entità durevoli come funzioni Go. Ospita l'applicazione sulla tua piattaforma di elaborazione. Il Durable Task Scheduler memorizza la cronologia delle esecuzioni e invia il lavoro ai tuoi lavoratori Go.
Importante
L’SDK di Go è in versione beta. Questo articolo e il quickstart di Go usano la v1.0.0-beta3. La beta non è un sostituto diretto della versione 0.6.0: non supporta backend embedded SQLite e PostgreSQL né l'host gRPC standalone. Go non è un linguaggio supportato da Durable Functions.
Prerequisiti e installazione
- Go 1.25 o versione successiva.
- Docker o un runtime container compatibile per l'emulatore Durable Task Scheduler.
- Per Azure, un scheduler e un task hub esistenti, e un'identità con il ruolo Durable Task Data Contributor. Vedi Accesso basato sull'identità.
Installa la beta rilasciata in un modulo Go esistente:
go get github.com/microsoft/durabletask-go@v1.0.0-beta3
Dopo aver aggiunto importazioni SDK al tuo codice, esegui go mod tidy per registrare dipendenze transitive e checksum.
Per un'applicazione completa che avvia un lavoratore, programma attività parallele, ne legge i risultati e si arresta, vedi Crea un'app con Durable Task SDKs - Go.
Modello di programmazione
SDK viene fornito come un unico modulo Go. I suoi principali pacchetti sono:
| Pacchetto | Purpose |
|---|---|
task |
Contesti di orchestrazione, attività e entità; registrazione dei compiti; primitive di workflow durature. |
durabletaskscheduler |
Opzioni di connessione e connessioni separate del client e del worker a Durable Task Scheduler. |
client |
Configurazione dei worker, inclusi concorrenza, versioning e filtri degli elementi di lavoro. |
api |
ID di istanze ed entità, metadati di orchestrazione e opzioni di richiesta di gestione. |
Un orchestratore ha la firma func(*task.OrchestrationContext) (any, error). Un'attività ha la firma func(task.ActivityContext) (any, error). Un'entità basata su funzioni ha la firma func(*task.EntityContext) (any, error). Leggi input tipizzato con GetInput, e restituisci un risultato serializzato o un errore. JSON è il formato dati predefinito.
Registrare ed eseguire attività
Crea un registro di sistema con task.NewTaskRegistry. Registrare i nomi stabili con AddOrchestratorN, AddActivityN e AddEntityN e verificare gli errori di registrazione. I nomi utilizzati nelle chiamate di attività e nella pianificazione del client devono corrispondere alle registrazioni dei componenti.
Analizzare la stringa di connessione con durabletaskscheduler.NewOptionsFromConnectionString. Passare le opzioni a:
-
durabletaskscheduler.NewClientper avviare e gestire istanze di orchestrazione. -
durabletaskscheduler.NewWorkerper eseguire attività pianificate.
Invoca Start sul worker per iniziare a elaborare gli elementi di lavoro. Usare client.WithAutoWorkItemFilters() per derivare filtri di instradamento worker dal registro. Non lasciare che un worker consumi attività registrate solo da un'altra applicazione.
Il cliente e il worker hanno connessioni separate. Chiudi il client quando hai finito. Svuota il worker con Shutdown, usando un contesto nuovo e delimitato se il contesto di esecuzione dell'applicazione è scaduto. L'avvio rapido verifica la presenza di errori in entrambe le operazioni.
Scrivere orchestratori deterministici
Usa il contesto di orchestrazione per operazioni durabili:
| Operation | Go API | Ulteriori informazioni |
|---|---|---|
| Sequenza attività | ctx.CallActivity(...).Await(&result) |
Catena di funzioni |
| Fan-out e fan-in | Programmare tutte le attività, poi ctx.WhenAll(tasks...) e leggere i risultati con Await |
Fan-out/fan-in |
| Ritardo | ctx.CreateTimer(duration).Await(nil) |
Timer durevoli |
| Attendi un evento | ctx.WaitForSingleEvent(name, timeout).Await(&result) |
Eventi esterni |
| Chiama un flusso di lavoro figlio | ctx.CallSubOrchestrator(...).Await(&result) |
Orchestrazioni secondarie |
| Ripetere un'attività | task.WithActivityRetryPolicy |
Gestione degli errori e ritentativi |
| Inizia una nuova cronologia | ctx.ContinueAsNew |
Orchestrazioni eterne |
| Segnala stato | ctx.SetCustomStatusValue |
Stato personalizzato |
| Chiama o segnala un'entità |
ctx.CallEntity e ctx.SignalEntity |
Entità durevoli |
Non eseguire chiamate di rete, I/O file, letture delle variabili d'ambiente o altro lavoro non deterministico in un orchestratore. Sposta quel lavoro in Attività. Usa le primitive di concorrenza durevoli dell'SDK invece di goroutine e canali nativi, sync.WaitGroup o time.Sleep nel codice dell'orchestratore. Usa ctx.Logger() per il logging compatibile con il replay. Per dettagli, vedi i vincoli di codice di Orchestrator.
Le attività possono eseguire normali operazioni di I/O Go, ma possono eseguire più di una volta. Fai sì che gli effetti collaterali esterni siano idempotenti.
Leggi i risultati di completamento
WaitForOrchestrationCompletion Ritornare senza errore significa che l'istanza ha raggiunto uno stato terminale, non necessariamente che il flusso di lavoro abbia avuto successo. Richiedi payload con api.WithFetchPayloads(true), verifica che RuntimeStatus sia api.RUNTIME_STATUS_COMPLETED, e poi decodifica l'uscita con ReadOutput.
Per le istanze fallite, ispezionare FailureDetails. Non segnalare un'orchestrazione fallita o terminata come risultato positivo. Vedi gestione delle istanze.
Connettiti all'emulatore o ad Azure
Il quickstart utilizza la stringa di connessione Endpoint=http://localhost:8080;TaskHub=default;Authentication=None. Usa Authentication=None per lo sviluppo locale con emulatori, non per l'accesso autenticato ad Azure.
Per Azure, usa l'endpoint HTTPS e il nome del task hub del tuo scheduler. Seleziona Authentication=DefaultAzure per la catena di credenziali Azure Identity, oppure Authentication=AzureCLI per un'identità di sviluppo che ha eseguito l'accesso tramite interfaccia della riga di comando di Azure. Go SDK supporta anche l'identità gestita e workload identity. Per i dettagli di configurazione e le modalità di autenticazione supportate, consulta la guida alla connessione Go SDK.
Il quickstart legge la stringa di connessione dalla DTS_CONNECTION_STRING variabile environment e la passa a NewOptionsFromConnectionString. L'SDK non legge automaticamente questa variabile.
Esempi
Il repository dell'SDK Go include campioni eseguibili per le sue aree di funzionalità, tra cui sequenze di attività, fan-out/fan-in, eventi esterni, retries, entità durature, schedulazioni, grandi payload, esportazione della cronologia e tracciamento distribuito. Per la lista completa, i prerequisiti e le istruzioni di esecuzione, consulta gli esempi di Go SDK.
Orchestrazioni di prova
L'SDK non include un back-end di archiviazione, quindi le orchestrazioni vengono eseguite solo su Durable Task Scheduler o sul suo emulatore. Esegui test su attività e altra logica di business con i normali test unitari Go. Per verificare il comportamento dell'orchestrazione, incluso il replay, esegui test di integrazione sull'emulatore o su un task hub dedicato.
Considerazioni sulla compatibilità beta
- Orari: Gli orari di Go non condividono il loro formato di stato persistente con altri SDK. Usa un task hub solo Go per le attività programmate.
- Blocchi di entità: Go e Python usano un ordine di locks multi-entità diverso da .NET. Non acquisire set di lock sovrapposti contemporaneamente tra orchestrazioni Go/Python e .NET.
- Riavvolgi: L'operatore Go rifiuta in modo conservativo le storie con ulteriori eventi non legati al ciclo di vita dopo un'attività fallita o un'operazione figlia. Una richiesta di rollback accettata non prova il recupero; verifica un nuovo ID di esecuzione e un output riuscito.
- API di gestione emulatori: L'elenco delle istanze e la purga filtrata presentano limitazioni documentate degli emulatori. Preferire la pulizia a livello di istanza per gli esempi e non svuotare un hub condiviso.
- Esportazione della cronologia (anteprima): Usa un hub di attività isolato, solo Go, e una destinazione di esportazione in modo che i processi di esportazione non possano esportare o eliminare dati applicativi non correlati.
Consulta la matrice di funzionalità e la guida ai transport del Go SDK per dettagli sulla compatibilità e sul comportamento del ciclo di vita.