Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Použitím Durable Task SDK pro Go můžete definovat orchestrace, aktivity a trvalé entity jako funkce Go. Provozujte aplikaci na vlastní výpočetní platformě. Durable Task Scheduler ukládá historii provádění a odesílá práci vašim pracovníkům Go.
Important
Go SDK je v beta verzi. Tento článek a Go quickstart používají verzi 1.0.0-beta3. Beta není náhradou za v0.6.0: nepodporuje vestavěné backendy SQLite a PostgreSQL ani samostatný gRPC host. Go nepatří mezi jazyky Durable Functions.
Předpoklady a instalace
- Go 1.25 nebo novější.
- Docker nebo kompatibilní kontejnerový runtime pro emulátor Durable Task Scheduler.
- Pro Azure je potřeba existující plánovač a task hub a identita s rolí Durable Task Data Contributor. Viz přístup založený na identitě.
Nainstalujte vydanou betu z existujícího modulu Go:
go get github.com/microsoft/durabletask-go@v1.0.0-beta3
Po přidání importů SDK do vašeho kódu spusťte go mod tidy, aby se zaznamenaly tranzitivní závislosti a kontrolní součty.
Pro kompletní aplikaci, která spustí pracovníka, naplánuje paralelní aktivity, čte jeho výsledky a vypne se, viz Vytvoření aplikace s Durable Task SDK – Go.
Programovací model
SDK je vydáván jako jeden modul Go. Její hlavní balíčky jsou:
| Package | Purpose |
|---|---|
task |
orchestrace, aktivity a entitní kontexty; registrace úloh; odolné primitivy pracovního postupu. |
durabletaskscheduler |
Možnosti připojení a oddělená klientská a pracovní připojení k Durable Task Scheduleru. |
client |
Konfigurace pracovníka, včetně souběžnosti, verzování a filtrů pracovních položek. |
api |
ID instancí a entit, metadata orchestrace a možnosti požadavků na správu. |
Orchestrátor má signaturu func(*task.OrchestrationContext) (any, error). Aktivita má signaturu func(task.ActivityContext) (any, error). Entita založená na funkcích má signaturu func(*task.EntityContext) (any, error). Přečtěte zadaný vstup pomocí GetInput a vraťte serializovatelný výsledek nebo chybu. JSON je výchozí datový formát.
Zaregistrujte a spouštějte úkoly
Vytvořte rejstřík s task.NewTaskRegistry. Zaregistrujte stálé názvy pomocí AddOrchestratorN, AddActivityN a AddEntityN a zkontrolujte chyby registrace. Názvy používané ve voláních aktivit a v plánování klienta musí odpovídat registracím.
Analyzujte připojovací řetězec pomocí durabletaskscheduler.NewOptionsFromConnectionString. Předat možnosti do:
-
durabletaskscheduler.NewClientpro spuštění a správu instancí orchestrace. -
durabletaskscheduler.NewWorkerke spuštění registrovaných úloh.
Na pracovním procesu zavolejte Start, aby začal zpracovávat pracovní úkoly. Použijte client.WithAutoWorkItemFilters() k odvození filtrů směrování pracovníků z registru. Nedovolte, aby worker zpracovával úlohy registrované pouze jinou aplikací.
Klient a pracovník mají oddělená připojení. Po dokončení zavřete klienta. Odpojte worker pomocí Shutdown, použijte čerstvý, omezený kontext, pokud vypršel kontext běhu aplikace. Quickstart kontroluje chyby v obou operacích.
Pište deterministické orchestrátory
Použijte orchestrační kontext pro odolné operace:
| Operation | Go API | Learn more |
|---|---|---|
| Sekvence aktivit | ctx.CallActivity(...).Await(&result) |
Řetězení funkcí |
| Fan out a fan in | Naplánujte všechny úkoly, poté ctx.WhenAll(tasks...) a čtěte výsledky pomocí Await |
Fan-out/fan-in |
| Delay | ctx.CreateTimer(duration).Await(nil) |
Trvalé časovače |
| Počkejte na událost | ctx.WaitForSingleEvent(name, timeout).Await(&result) |
Externí události |
| Zavolat podřazený pracovní postup | ctx.CallSubOrchestrator(...).Await(&result) |
Dílčí orchestrace |
| Opakování aktivity | task.WithActivityRetryPolicy |
Zpracování chyb a opakované pokusy |
| Začít novou historii | ctx.ContinueAsNew |
Věčná orchestrace |
| Průběh sestavy | ctx.SetCustomStatusValue |
Vlastní stav |
| Zavolejte entitu nebo jí odešlete signál |
ctx.CallEntity a ctx.SignalEntity |
Odolné entity |
Neprovádějte síťová volání, vstupy a výstupy souborů, čtení proměnných prostředí ani jinou nedeterministickou práci v orchestrátoru. Přesuňte tuto práci do aktivit. Použijte odolná primitiva souběžnosti sady SDK místo nativních gorutin, kanálů, sync.WaitGroup, nebo time.Sleep v orchestrátorovém kódu. Použijte ctx.Logger() pro protokolování zohledňující replay. Podrobnosti viz omezení kódu Orchestrator.
Aktivity mohou provádět běžné Go I/O, ale mohou se spustit více než jednou. Zajistěte, aby externí vedlejší efekty byly idempotentní.
Přečíst výsledky dokončení
WaitForOrchestrationCompletion vrácení bez chyby znamená, že instance dosáhla terminálního stavu, ne nutně že workflow bylo úspěšné. Požádejte o payloady s api.WithFetchPayloads(true), zkontrolujte, že RuntimeStatus je s api.RUNTIME_STATUS_COMPLETED, a poté dekódujte výstup pomocí ReadOutput.
Pro neúspěšné instance zkontrolujte FailureDetails. Nehlaste neúspěšnou nebo ukončenou orchestraci jako úspěšný výsledek. Viz správu instance.
Připojte se k emulátoru nebo k Azure
Quickstart používá připojovací řetězec Endpoint=http://localhost:8080;TaskHub=default;Authentication=None. Použijte Authentication=None pro místní vývoj s emulátorem, ne pro ověřený přístup k Azure.
Pro Azure použijte HTTPS endpoint a název task hubu vašeho plánovače. Vyberte Authentication=DefaultAzure pro řetězec přihlašovacích údajů Azure Identity, nebo Authentication=AzureCLI pro vývojovou identitu přihlášenou přes Azure CLI. Go SDK také podporuje spravovanou identitu a identitu pracovní zátěže. Pro podrobnosti o konfiguraci a podporovaných autentizačních režimech viz průvodce připojením Go SDK.
Quickstart přečte připojovací řetězec z DTS_CONNECTION_STRING proměnné prostředí a předá jej do NewOptionsFromConnectionString. SDK tuto proměnnou automaticky nečte.
Samples
Repozitář Go SDK obsahuje běžitelné ukázky pro své oblasti funkcí, včetně sekvencí aktivit, fan-out/fan-in, externích událostí, opakovaných pokusů, trvalých entit, harmonogramů, velkých payloadů, exportu historie a distribuovaného trasování. Pro úplný seznam, předpoklady a instrukce k běhu viz ukázky Go SDK.
orchestrace testů
SDK neobsahuje backend úložiště, takže orchestrace běží pouze proti Durable Task Scheduleru nebo jeho emulátoru. Testujte aktivity a další obchodní logiku pomocí běžných jednotkových testů Go. Pro ověření chování orchestrace, včetně přehrávání, spusťte integrační testy proti emulátoru nebo specializovanému task hubu.
Aspekty kompatibility beta verze
- Plány: Plány v Go nesdílejí svůj formát perzistentního stavu s ostatními SDK. Používejte rozbočovač úloh jen pro Go pro plánované úlohy.
- Zámky entit: Go a Python používají jiné pořadí víceentitních zámků než .NET. Nezískávejte současně překrývající se sady zámků napříč orchestracemi Go/Python a .NET.
- Vraťme se zpět: Pracovník Go konzervativně odmítá historie s dalšími událostmi nesouvisejícími s životním cyklem po neúspěšné činnosti nebo podřízené operaci. Přijatý požadavek na vrácení nedokazuje obnovu; ověřte nové ID spuštění a úspěšný výstup.
- API pro správu emulátorů: Seznam instancí a filtrované čištění mají zdokumentovaná omezení emulátoru. U příkladů preferujte vyhrazený úklid pro instanci a nečistěte sdílený hub.
- Export historie (náhled): Použijte izolovaný hub úloh pouze pro Go a cílové umístění exportu, aby exportní úlohy nemohly exportovat nebo mazat nesouvisející data aplikací.
Podrobnou kompatibilitu a chování životního cyklu najdete v matici funkcí Go SDK a průvodci přenosem.