Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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
- Go 1.25 of hoger.
- Docker of een compatibele containerruntime voor de Durable Task Scheduler-emulator.
- Voor Azure een bestaande scheduler en taakhub, en een identiteit met de rol Durable Task Data Contributor. Zie Identiteitsgebaseerde toegang.
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.NewClientom orkestratie-instanties te starten en te beheren. -
durabletaskscheduler.NewWorkerom 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.