Ontwikkel met de Durable Task SDK voor Go

Door gebruik te maken van de Durable Task SDK voor Go kun je orkestraties, activiteiten en duurzame entiteiten definiëren als Go-functies. Host de applicatie op je eigen computeplatform. De Durable Task Scheduler slaat de uitvoeringsgeschiedenis op en stuurt werk naar je Go-workers.

Important

De Go SDK is in bèta. Dit artikel en de Go quickstart gebruiken v1.0.0-beta3. De bèta is geen drop-in vervanging van v0.6.0: het ondersteunt geen embedded SQLite en PostgreSQL-backends of de standalone gRPC-host. Go is geen Durable Functions-taal.

Vereisten en installatie

Installeer de uitgebrachte bèta vanuit een bestaande Go-module:

go get github.com/microsoft/durabletask-go@v1.0.0-beta3

Nadat je SDK-imports aan je code hebt toegevoegd, voer go mod tidy uit om transitieve afhankelijkheden en checksums vast te leggen.

Voor een complete applicatie die een worker start, parallelle activiteiten plant, de resultaten leest en wordt afgesloten, zie Een app maken met Durable Task SDK's - Go.

Programmeermodel

De SDK wordt geleverd als één Go-module. De belangrijkste pakketten zijn:

Package Purpose
task Orkestratie, activiteit en entiteitscontexten; taakregistratie; primitieven voor duurzame werkstromen.
durabletaskscheduler Verbindingsopties en afzonderlijke client- en workerverbindingen naar Durable Task Scheduler.
client Werkerconfiguratie, inclusief gelijktijdigheid, versiebeheer en filters voor werkitems.
api Instance- en entity-ID’s, orchestratiemetadata en opties voor beheerverzoeken.

Een orkestrator heeft de signatuur func(*task.OrchestrationContext) (any, error). Een activiteit heeft de signatuur func(task.ActivityContext) (any, error). Een functiegebaseerde entiteit heeft de signatuur func(*task.EntityContext) (any, error). Lees getypeerde invoer met GetInput, en geef een serialiseerbaar resultaat of een foutmelding terug. JSON is het standaard dataformaat.

Registreer en voer taken uit

Maak een registervermelding aan met task.NewTaskRegistry. Registreer stabiele namen met AddOrchestratorN, AddActivityN, en AddEntityN, en controleer registratiefouten. De namen die worden gebruikt in aanroepen van activiteiten en clientplanning moeten overeenkomen met de registraties.

Parseer de verbindingsreeks met durabletaskscheduler.NewOptionsFromConnectionString. Geef de opties aan:

  • durabletaskscheduler.NewClient om orkestratie-instanties te starten en te beheren.
  • durabletaskscheduler.NewWorker om geregistreerde taken uit te voeren.

Roep Start op de worker aan om te beginnen met het verwerken van werkitems. Gebruik client.WithAutoWorkItemFilters() om worker routing-filters af te leiden uit het register. Voorkom dat een worker taken verwerkt die alleen door een andere applicatie zijn geregistreerd.

De klant en de werknemer hebben elk een eigen verbinding. Sluit de client af als je klaar bent. Leeg de worker met Shutdown, met een vernieuwde, begrensde context als de uitvoeringscontext van de applicatie is verlopen. De quickstart controleert op fouten van beide bewerkingen.

Schrijf deterministische orchestrators

Gebruik de orkestratiecontext voor duurzame bewerkingen:

Operation Go API Learn more
Activiteiten in volgorde ctx.CallActivity(...).Await(&result) Functiekoppeling
Fan-out en fan-in Plan alle taken ctx.WhenAll(tasks...) en lees de resultaten met Await Fan-out/fan-in
Delay ctx.CreateTimer(duration).Await(nil) Duurzame timers
Wacht op een gebeurtenis ctx.WaitForSingleEvent(name, timeout).Await(&result) Externe gebeurtenissen
Roep een onderliggende workflow aan ctx.CallSubOrchestrator(...).Await(&result) Suborkestraties
Een activiteit opnieuw proberen task.WithActivityRetryPolicy Foutafhandeling en herpogingen
Nieuwe geschiedenis starten ctx.ContinueAsNew Eeuwige orkestraties
Voortgang melden ctx.SetCustomStatusValue Aangepaste status
Roep of signaleer een entiteit ctx.CallEntity en ctx.SignalEntity Duurzame entiteiten

Voer in een orchestrator geen netwerkoproepen, bestands-I/O, het lezen van omgevingsvariabelen of ander niet-deterministisch werk uit. Plaats dat item in activiteiten. Gebruik de duurzame gelijktijdigheidsprimitieven van de SDK in plaats van native goroutines, kanalen, sync.WaitGroupof time.Sleep in orchestratorcode. Gebruik ctx.Logger() voor replay-bewuste logboekregistratie. Voor details, zie Orchestrator-codebeperkingen.

Activiteiten kunnen gewone Go I/O uitvoeren, maar ze kunnen meer dan eens worden uitgevoerd. Maak externe neveneffecten idempotent.

Bekijk voltooiingsresultaten

WaitForOrchestrationCompletion Zonder fout terugkeren betekent dat de instantie een terminale toestand heeft bereikt, niet per se dat de workflow is geslaagd. Vraag payloads aan met api.WithFetchPayloads(true), controleer dat api.RUNTIME_STATUS_COMPLETEDRuntimeStatus is en decodeer vervolgens output met ReadOutput.

Bij mislukte instanties, controleer FailureDetails. Rapporteer geen mislukte of beëindigde orkestratie als succesvol resultaat. Zie Instance management.

Verbind met de emulator of Azure

De quickstart gebruikt de verbindingsreeks Endpoint=http://localhost:8080;TaskHub=default;Authentication=None. Gebruik Authentication=None voor lokale emulatorontwikkeling, niet voor geauthenticeerde Azure-toegang.

Voor Azure gebruik je het HTTPS-endpoint en de naam van de taakhub van je scheduler. Selecteer Authentication=DefaultAzure voor de Azure Identity-credentialketen, of Authentication=AzureCLI voor een ontwikkelidentiteit die is ingelogd via Azure CLI. De Go SDK ondersteunt ook beheerde identiteit en workload-identiteit. Voor configuratiedetails en ondersteunde authenticatiemodi, zie de Go SDK-verbindingsgids.

De quickstart leest de verbindingsreeks uit de DTS_CONNECTION_STRING omgevingsvariabele en geeft deze door aan NewOptionsFromConnectionString. De SDK leest deze variabele niet automatisch.

Samples

De Go SDK-repository bevat uitvoerbare voorbeelden voor zijn feature-areas, waaronder activiteitensequenties, fan-out/fan-in, externe gebeurtenissen, herkansingen, duurzame entiteiten, planningen, grote payloads, geschiedenisexport en gedistribueerd traceren. Voor de volledige lijst, vereisten en uitvoerinstructies, zie de voorbeelden van de Go SDK.

testorchestraties

De SDK bevat geen opslagbackend, dus orkestraties draaien alleen tegen Durable Task Scheduler of de emulator daarvan. Testactiviteiten en andere bedrijfslogica met gewone Go-unittests. Om orkestratiegedrag te verifiëren, inclusief replay, voer integratietests uit tegen de emulator of een speciale taakhub.

Overwegingen inzake bètacompatibiliteit

  • Schema’s: Go-schema’s delen hun persisted state-formaat niet met andere SDK’s. Gebruik een Go-only taakhub voor geplande taken.
  • Entiteitslocks: Go en Python gebruiken een andere multi-entity lock order dan .NET. Verwerf geen overlappende verzamelingen vergrendelingen gelijktijdig in Go/Python- en .NET-orkestraties.
  • Terugspoelen: De Go-worker wijst uit voorzorg historieën af met aanvullende gebeurtenissen buiten de levenscyclus na een mislukte activiteit of onderliggende bewerking. Een geaccepteerd rewind-verzoek bewijst geen herstel; verifieer een nieuwe uitvoerings-ID en succesvolle output.
  • Emulatorbeheer-API's: Instance-listing en gefilterd opschonen hebben gedocumenteerde emulatorbeperkingen. Geef de voorkeur aan instance-scoped cleanup voor voorbeelden, en maak geen gedeelde hub schoon.
  • Geschiedenisexport (preview): Gebruik een geïsoleerde taakhub alleen voor Go en een exportbestemming zodat exporttaken geen niet-gerelateerde applicatiegegevens kunnen exporteren of verwijderen.

Zie de Go SDK-featurematrix en transportgids voor gedetailleerde compatibiliteit en levenscyclusgedrag.