Vyvíjejte s Durable Task SDK pro Go

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

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.NewClient pro spuštění a správu instancí orchestrace.
  • durabletaskscheduler.NewWorker ke 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.