Twórz przy użyciu Durable Task SDK dla Go

Korzystając z Durable Task SDK for Go, możesz zdefiniować orkiestrację, aktywności i trwałe jednostki jako funkcje Go. Uruchom aplikację na własnej platformie obliczeniowej. Durable Task Scheduler przechowuje historię wykonywania i przydziela zadania workerom Go.

Important

SDK Go jest w becie. Ten artykuł oraz szybki start Go używają wersji 1.0.0-beta3. Beta nie jest bezpośrednim zamiennikiem wersji 0.6.0: nie obsługuje wbudowanych backendów SQLite i PostgreSQL ani samodzielnego hosta gRPC. Go nie jest językiem Durable Functions.

Wymagania wstępne i instalacja

Zainstaluj opublikowaną betę z istniejącego modułu Go:

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

Po dodaniu importów SDK do kodu uruchom go mod tidy, aby zapisać zależności przechodnie i sumy kontrolne.

Aby uzyskać kompletną aplikację, która uruchamia pracownika, planuje równoległe działania, odczytuje wyniki i zamyka działalność, zobacz Create an app with Durable Task SDKs - Go.

Model programowania

SDK jest dostępny jako jeden moduł Go. Główne pakiety to:

Package Purpose
task Orkiestracja, aktywności i konteksty encji; rejestracja zadań; trwałe prymitywy workflow.
durabletaskscheduler Opcje połączeń oraz oddzielne połączenia klienta i pracownika z Durable Task Scheduler.
client Konfiguracja workera, w tym współbieżność, wersjonowanie i filtry elementów roboczych.
api Identyfikatory instancji i podmiotów, metadane orkiestracji oraz opcje żądań zarządczych.

Orkiestrator ma podpis func(*task.OrchestrationContext) (any, error). Aktywność ma sygnaturę func(task.ActivityContext) (any, error). Jednostka oparta na funkcjach ma sygnaturę func(*task.EntityContext) (any, error). Odczytaj wprowadzone dane wejściowe za pomocą GetInput, i zwróć serializowalny wynik lub błąd. JSON to domyślny format danych.

Rejestruj i wykonuj zadania

Utwórz rejestr systemowy z task.NewTaskRegistry. Rejestruj nazwy stabilne za pomocą AddOrchestratorN, AddActivityN, i AddEntityN, i sprawdzaj błędy rejestracji. Nazwy używane w wywołaniach aktywności i harmonogramowaniu klientów muszą odpowiadać rejestracjami.

Parsuj parametry połączenia za pomocą durabletaskscheduler.NewOptionsFromConnectionString. Przekaż opcje do:

  • durabletaskscheduler.NewClient do uruchamiania i zarządzania instancjami orkiestracji.
  • durabletaskscheduler.NewWorker aby wykonać zarejestrowane zadania.

Wywołaj Start na pracowniku, aby rozpocząć przetwarzanie zadań roboczych. Użyj client.WithAutoWorkItemFilters(), aby utworzyć filtry trasowania pracowników z rejestru. Nie pozwól, by pracownik przetwarzał zadania rejestrowane tylko przez inną aplikację.

Klient i pracownik mają oddzielne połączenia. Zamknij aplikację po skończeniu. Opróżnij workera Shutdown, używając świeżego, ograniczonego kontekstu, jeśli kontekst uruchomienia aplikacji wygasł. Szybki start sprawdza, czy występują błędy w obu operacjach.

Twórz deterministyczne orkiestratory

Wykorzystaj kontekst orkiestracji do operacji trwałych:

Operation Go API Learn more
Aktywności sekwencji ctx.CallActivity(...).Await(&result) Łączenie funkcji
Rozgałęzienie i scalanie Zaplanuj wszystkie zadania i ctx.WhenAll(tasks...) przeczytaj wyniki za pomocą Await Fan-out/fan-in
Delay ctx.CreateTimer(duration).Await(nil) Trwałe czasomierze
Czekaj na zdarzenie ctx.WaitForSingleEvent(name, timeout).Await(&result) Zdarzenia zewnętrzne
Wywołaj podrzędny workflow ctx.CallSubOrchestrator(...).Await(&result) Orkiestracje podrzędne
Ponów próbę działania task.WithActivityRetryPolicy Obsługa błędów i ponowne próby
Rozpocznij nową historię ctx.ContinueAsNew Wieczne aranżacje
Zgłaszanie postępu ctx.SetCustomStatusValue Status niestandardowy
Zadzwoń lub zgłoś podmiot ctx.CallEntity i ctx.SignalEntity Jednostki trwałe

Nie wykonuj wywołań sieciowych, wejścia i wyjścia plików, odczytów zmiennych środowiskowych ani innych niedeterministycznych prac w orkiestratorze. Przenieś tę pracę do Aktywności. Używaj trwałych prymitywów współbieżności SDK zamiast natywnych goroutines, kanałów, sync.WaitGroup lub time.Sleep w kodzie orkiestratora. Użyj ctx.Logger() do rejestrowania ze świadomością odtwarzania. Szczegóły znajdują się w Ograniczeniach kodu Orchestrator.

Aktywności mogą wykonywać zwykłe operacje wejścia/wyjścia Go, ale mogą wykonać się więcej niż raz. Upewnij się, że zewnętrzne skutki uboczne są idempotentne.

Odczytaj wyniki ukończenia

WaitForOrchestrationCompletion Zwracanie bez błędu oznacza, że instancja osiągnęła stan terminalowy, a niekoniecznie że workflow się powiódł. W żądaniach z api.WithFetchPayloads(true) sprawdzaj, czy RuntimeStatus to api.RUNTIME_STATUS_COMPLETED, a następnie dekoduj dane wyjściowe za pomocą ReadOutput.

W przypadku nieudanych instancji sprawdź FailureDetails. Nie zgłaszaj nieudanej lub przerwanej orkiestracji jako skutecznego efektu. Zobacz zarządzanie instancjami.

Połącz się z emulatorem lub z platformą Azure

Przewodnik Szybki start używa parametrów połączenia Endpoint=http://localhost:8080;TaskHub=default;Authentication=None. Używaj Authentication=None do lokalnego programowania z użyciem emulatora, a nie do uwierzytelnionego dostępu do Azure.

W przypadku platformy Azure użyj punktu końcowego HTTPS harmonogramu i nazwy centrum zadań harmonogramu. Wybierz Authentication=DefaultAzure dla łańcucha poświadczeń Azure Identity lub Authentication=AzureCLI dla tożsamości deweloperskiej zalogowanej za pomocą interfejsu wiersza polecenia Azure (Azure CLI). SDK Go obsługuje również tożsamość zarządzaną i tożsamość obciążenia roboczego. Szczegóły konfiguracji i obsługiwane tryby uwierzytelniania można znaleźć w przewodniku po połączeniu Go SDK.

Quickstart odczytuje parametry połączenia ze zmiennej środowiskowej DTS_CONNECTION_STRING i przekazuje go do NewOptionsFromConnectionString. SDK nie odczytuje tej zmiennej automatycznie.

Samples

Repozytorium SDK Go zawiera przykłady do uruchomienia dla swoich obszarów funkcjonalnych, w tym sekwencje aktywności, fan-out/fan-in, zdarzenia zewnętrzne, ponowienia, trwałe encje, harmonogramy, duże ładunki danych, eksport historii oraz rozproszone śledzenie. Pełną listę, wymagania wstępne i instrukcje uruchomienia znajdziesz w przykładach SDK Go.

Orkiestracje testowe

SDK nie zawiera backendu magazynu danych, więc orkiestracje działają tylko na Durable Task Scheduler lub jego emulatorze. Testuj działania i inną logikę biznesową za pomocą zwykłych testów jednostkowych Go. Aby zweryfikować zachowanie orkiestracji, w tym odtwarzanie, uruchom testy integracyjne na emulatorze lub w dedykowanym Task Hub.

Uwagi dotyczące zgodności wersji beta

  • Harmonogramy: Harmonogramy Go nie współdzielą formatu utrwalonego stanu z innymi SDK. Do zadań zaplanowanych używaj hubu zadań tylko dla Go.
  • Blokady encji: Go i Python używają innej kolejności blokad dla wielu encji niż platforma .NET. Nie uzyskuj jednocześnie nakładających się zestawów blokad w orkiestracjach Go/Python i .NET.
  • Cofnij: Worker Go ostrożnie odrzuca historie z dodatkowymi zdarzeniami niezwiązanymi z cyklem życia po nieudanej aktywności lub operacji podrzędnej. Zaakceptowane żądanie przewijania nie potwierdza odzyskania; zweryfikuj nowy identyfikator wykonania i pomyślne wyjście.
  • API zarządzania emulatorami: Lista instancji i filtrowane czyszczenie mają udokumentowane ograniczenia emulatora. Preferuj czyszczenie w zakresie instancji w przykładach i nie czyść współdzielonego huba.
  • Eksport historii (podgląd): Użyj izolowanego hubu zadań tylko dla Go i miejsca docelowego eksportu, aby zadania eksportu nie mogły eksportować ani usuwać niepowiązanych danych aplikacji.

Zobacz macierz funkcji Go SDK oraz przewodnik transportowy , aby poznać szczegóły kompatybilności i zachowania cyklu życia.