Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Genom att använda Durable Task SDK för Go kan du definiera orkestreringar, aktiviteter och durable entities som Go-funktioner. Hosta applikationen på din egen beräkningsplattform. Durable Task Scheduler lagrar körhistorik och skickar arbete till dina Go-workers.
Important
Go SDK är i beta. Den här artikeln och Go quickstart använder v1.0.0-beta3. Betaversionen är inte en drop-in-ersättning för v0.6.0: den stöder inte inbyggda SQLite- och PostgreSQL-bakändar eller den fristående gRPC-värden. Go är inte ett Durable Functions-språk.
Förutsättningar och installation
- Go 1.25 eller senare.
- Docker eller en kompatibel container-runtime för emulatorn Durable Task Scheduler.
- För Azure, en befintlig schemaläggare och uppgiftshubb, samt en identitet med rollen Durable Task Data Contributor. Se Identitetsbaserad åtkomst.
Installera den släppta betan från en befintlig Go-modul:
go get github.com/microsoft/durabletask-go@v1.0.0-beta3
Efter att ha lagt till SDK-importer i din kod, kör go mod tidy för att registrera transitiva beroenden och kontrollsummor.
För en komplett applikation som startar en arbetare, schemalägger parallella aktiviteter, läser deras resultat och stänger ner, se Skapa en app med Durable Task SDK:er - Go.
Programmeringsmodell
SDK:n levereras som en Go-modul. Dess huvudpaket är:
| Paket | Purpose |
|---|---|
task |
Orkestrering, aktivitet och entitetskontexter; uppgiftsregistrering; primitiver för beständiga arbetsflöden. |
durabletaskscheduler |
Anslutningsalternativ och separata klient- och arbetaranslutningar till Durable Task Scheduler. |
client |
Konfiguration av Worker, inklusive samtidighet, versionshantering och filter för arbetsobjekt. |
api |
Instans- och entitets-ID:n, orkestreringsmetadata och alternativ för hanteringsförfrågningar. |
En orkestratör har signaturen func(*task.OrchestrationContext) (any, error). En aktivitet har signaturen func(task.ActivityContext) (any, error). En funktionsbaserad entitet har signaturen func(*task.EntityContext) (any, error). Läs typbestämd indata med GetInput, och returnera ett serialiserbart resultat eller ett fel. JSON är standarddataformatet.
Registrera och utför uppgifter
Skapa ett register med task.NewTaskRegistry. Registrera stabila namn med AddOrchestratorN, AddActivityN och AddEntityN, och kontrollera om registreringen gav fel. Namnen som används i aktivitetsanrop och schemaläggning på klientsidan måste matcha registreringarna.
Tolka reťazec pripojenia med durabletaskscheduler.NewOptionsFromConnectionString. Ange alternativen till:
-
durabletaskscheduler.NewClientför att starta och hantera orkestreringsinstanser. -
durabletaskscheduler.NewWorkerför att utföra registrerade uppgifter.
Anropa Start på arbetaren för att börja behandla arbetsuppgifter. Använd client.WithAutoWorkItemFilters() för att härleda worker routing-filter från registret. Låt inte en arbetare bearbeta uppgifter som bara registreras av en annan applikation.
Klienten och workern har separata anslutningar. Stäng klienten när du är klar. Töm arbetaren med Shutdown, med en ny, begränsad kontext om applikationens körningskontext har gått ut. Snabbstarten kontrollerar om det finns fel från båda operationerna.
Skriv deterministiska orkestratörer
Använd orkestreringskontexten för varaktiga åtgärder:
| Operation | Go API | Learn more |
|---|---|---|
| Aktiviteter i sekvens | ctx.CallActivity(...).Await(&result) |
Kedjning av funktioner |
| Förgrena och sammanföra | Schemalägg alla uppgifter och ctx.WhenAll(tasks...) läs resultaten med Await |
Fan-out/fan-in |
| Delay | ctx.CreateTimer(duration).Await(nil) |
Hållbara timers |
| Vänta på en händelse | ctx.WaitForSingleEvent(name, timeout).Await(&result) |
Externa händelser |
| Anropa ett underordnat arbetsflöde | ctx.CallSubOrchestrator(...).Await(&result) |
Suborkestreringar |
| Försök igen med en aktivitet | task.WithActivityRetryPolicy |
Felhantering och omförsök |
| Starta en ny historik | ctx.ContinueAsNew |
Eviga orkestrationer |
| Rapportförlopp | ctx.SetCustomStatusValue |
Anpassad status |
| Anropa eller signalera till en entitet |
ctx.CallEntity och ctx.SignalEntity |
Varaktiga entiteter |
Utför inte nätverksanrop, fil-I/O, miljövariabelläsningar eller annat icke-deterministiskt arbete i en orkestrator. Lägg arbetet i aktiviteter. Använd SDK:ns hållbara samtidighetsprimitiva istället för inbyggda goroutines, kanaler, sync.WaitGroup eller time.Sleep i orchestratorkod. Använd ctx.Logger() för replay-medveten loggning. För detaljer, se Orchestrator-kodbegränsningar.
Aktiviteter kan utföra vanlig Go I/O, men de kan köras mer än en gång. Gör externa bieffekter idempotenta.
Läs slutföranderesultat
WaitForOrchestrationCompletion Att returnera utan fel betyder att instansen nådde ett terminaltillstånd, inte nödvändigtvis att arbetsflödet lyckades. Begärandelaster med api.WithFetchPayloads(true), kontrollera att RuntimeStatus är api.RUNTIME_STATUS_COMPLETED, och avkoda sedan utdata med ReadOutput.
Vid misslyckade fall, inspektera FailureDetails. Rapportera inte en misslyckad eller avbruten orkestrering som ett lyckat resultat. Se Instanshantering.
Koppla upp till emulatorn eller Azure
Snabbstarten använder anslutningssträngen Endpoint=http://localhost:8080;TaskHub=default;Authentication=None. Använd Authentication=None för lokal emulatorutveckling, inte för autentiserad Azure-åtkomst.
För Azure, använd din schemaläggares HTTPS-endpoint och namnet på uppgiftshubben. Välj Authentication=DefaultAzure för Azure Identity-autentiseringskedjan, eller Authentication=AzureCLI för en utvecklingsidentitet som är inloggad via Azure CLI. Go SDK:t stödjer också managed identity och workload identity. För konfigurationsdetaljer och stödda autentiseringslägen, se Go SDK:s anslutningsguide.
Quickstart läser reťazec pripojenia från DTS_CONNECTION_STRING miljövariabeln och skickar den till NewOptionsFromConnectionString. SDK:n läser inte denna variabel automatiskt.
Samples
Go SDK-repot inkluderar körbara prover för dess funktionsområden, inklusive aktivitetssekvenser, fan-out/fan-in, externa händelser, återförsök, Durable Entities, schemaläggning, stora nyttolaster, historikexport och distribuerad spårning. För fullständig lista, förkunskapskrav och körinstruktioner, se Go SDK-exemplen.
Testorkestrering
SDK:n inkluderar ingen lagringsbackend, så orkestreringar körs endast mot Durable Task Scheduler eller dess emulator. Testa aktiviteter och annan affärslogik med vanliga Go-enhetstester. För att verifiera orkestreringsbeteende, inklusive omkörning, kör integrationstester mot emulatorn eller en dedikerad task hub.
Överväganden för betakompatibilitet
- Schemaläggningar: Go-schemaläggningar delar inte sitt persistenta tillståndsformat med andra SDK:er. Använd en Go-only task hub för schemalagda uppgifter.
- Entitetslås: Go och Python använder en annan ordning med flera entitetslås än .NET. Ta inte överlappande låsuppsättningar samtidigt mellan Go/Python- och .NET-orkestreringar.
- Spola tillbaka: Go-arbetaren avvisar konservativt historik med ytterligare icke-livscykelhändelser efter en misslyckad aktivitet eller underordnad operation. En accepterad begäran om återspolning bevisar inte återställning; verifiera ett nytt exekverings-ID och lyckad utdata.
- Emulatorhanterings-API:er: Instanslistning och filtrerad rensning har dokumenterade begränsningar för emulatorer. Föredra instansbaserad rensning för exempel, och rensa inte en delad hubb.
- Historikexport (förhandsvisning): Använd en isolerad, Go-only aktivitetshubb och exportdestination så att exportjobb inte kan exportera eller ta bort orelaterad applikationsdata.
Se Go SDK:s funktionsmatris och transportguide för detaljerad kompatibilitet och livscykelbeteende.