Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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
- Go 1.25 lub nowszy.
- Docker lub kompatybilny pakiet uruchomieniowy dla emulatora Durable Task Scheduler.
- W przypadku platformy Azure wymagane są istniejący planista i centrum zadań oraz tożsamość z rolą Durable Task Data Contributor. Zobacz Dostęp oparty na tożsamości.
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.NewClientdo uruchamiania i zarządzania instancjami orkiestracji. -
durabletaskscheduler.NewWorkeraby 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.