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.
W tym szybkim starcie nauczysz się, jak uruchomić próbkę SDK Durable Task, która wykorzystuje filtrowanie zadań do kierowania orkiestracji i działań do dedykowanych pracowników.
Filtrowanie zadań jest obecnie dostępne w SDK .NET, Java oraz Python Durable Task. Wybierz język, korzystając z zakładek na górze strony. Aby dowiedzieć się, jak działa filtrowanie elementów roboczych i jak umożliwia płaską komunikację sieciową w heterogenicznych środowiskach obliczeniowych, zobacz Filtrowanie elementów roboczych w Durable Task Scheduler.
Note
Filtrowanie elementów pracy nie jest jeszcze dostępne w zestawach SDK Durable Task dla języków JavaScript i PowerShell. Aby wypróbować tę funkcję już dziś, wybierz zakładkę C#, Java lub Python na górze strony.
- Skonfiguruj i uruchom emulator narzędzia Durable Task Scheduler na potrzeby programowania lokalnego.
- Uruchom pracowników programu Orchestrator, Validator i Shipper oraz klienta.
- Sprawdź, czy elementy robocze są kierowane tylko do pasujących pracowników.
- Wdróż przykład w usłudze Azure Container Apps przy użyciu interfejsu wiersza polecenia dla deweloperów platformy Azure.
Wymagania wstępne
Przed rozpoczęciem:
- Zainstaluj zestaw .NET 10 SDK lub nowszy.
- Zainstaluj platformę Docker na potrzeby uruchamiania emulatora.
- Zainstaluj interfejs wiersza polecenia dla deweloperów platformy Azure.
- Klonuj repozytorium Durable Task Scheduler z GitHub.
Przygotowywanie projektu
Azure-Samples/Durable-Task-Scheduler W katalogu głównym przejdź do przykładowego katalogu:
cd samples/scenarios/WorkItemFilteringSplitActivities
Uruchamianie lokalnie za pomocą emulatora
Ściąganie obrazu emulatora:
docker pull mcr.microsoft.com/durable-task/emulator:latestUruchom emulator:
docker run -d --name dts-emulator -p 8080:8080 -p 8082:8082 mcr.microsoft.com/durable-task/emulator:latestSkompiluj przykład:
dotnet buildUruchom każdego worker'a w osobnym terminalu:
Terminal 1 — proces roboczy programu Orchestrator
dotnet run --project src/OrchestratorWorkerTerminal 2 — pracownik walidacji
dotnet run --project src/ValidatorWorkerTerminal 3 — pracownik nadawcy
dotnet run --project src/ShipperWorkerW czwartym terminalu uruchom klienta:
dotnet run --project src/ClientOtwórz pulpit nawigacyjny emulatora pod adresem ,
http://localhost:8082aby monitorować aktywność orkiestracji.
Tip
Alternatywą dla ręcznego otwierania czterech terminali jest uruchomienie dołączonego skryptu wygody:
./run-local.sh
Uruchamia emulator, buduje rozwiązanie i uruchamia wszystkich pracowników oraz klienta.
Oczekiwane dane wyjściowe z filtrowania elementów roboczych
Klient planuje uruchomienie zestawu trzech orkiestracji co 30 sekund i powtarza ten proces przez około 10 minut. Na wszystkich terminalach widzisz:
- Klient planuje partie orkiestracji i czeka na zakończenie każdej partii. Ukończona partia rejestruje
3 completed, 0 failed. - Proces roboczy programu Orchestrator wysyła wywołania działań
ValidateOrderiShipOrder. - Pracownik Validatora obsługuje wyłącznie
ValidateOrderzadania związane z aktywnością. - Pracownik Transportera zajmuje się wyłącznie
ShipOrderzadaniami dotyczącymi czynności.
To zachowanie potwierdza, że filtrowanie elementów roboczych kieruje elementy tylko do pracowników, którzy zarejestrowali pasujące typy zadań.
Gdy zobaczysz przynajmniej jeden raport 3 completed, 0 failedpartii, próbka działa zgodnie z oczekiwaniami. Nie musisz czekać na zakończenie pełnej pętli – naciśnij Ctrl+C w każdym terminalu, aby zatrzymać klienta i pracowników. Jeśli pozwolisz klientowi działać do końca, wyświetli końcowe podsumowanie wyników, a następnie pozostanie uruchomiony, dopóki nie zatrzymasz go za pomocą Ctrl+C.
Wypróbuj: eksperyment dotyczący routingu ścisłego
Aby zobaczyć, że routing jest rygorystyczny (brak powrotu do innych procesów roboczych):
- Zatrzymaj proces Shipper worker (Ctrl+C w terminalu 3).
- Uruchom ponownie klienta, aby zaplanować nowe aranżacje.
- Zwróć uwagę, że:
- Proces roboczy programu Orchestrator pobiera i uruchamia aranżacje.
- Pracownik walidacji uzupełnia
ValidateOrderdla każdego zamówienia. -
ShipOrderzadania pozostają w trakcie oczekiwania – pracownicy Validatora i Orchestratora ich nie otrzymują. - Orkiestracje pozostają w statusie "Działa", czekając na
ShipOrderzakończenie.
- Uruchom ponownie proces roboczy Shipper — oczekujące
ShipOrderelementy pracy są dostarczane natychmiast, a orkiestracje zostają ukończone.
Ten eksperyment pokazuje, że zadania są kierowane tylko do pracowników z pasującymi filtrami. Nie ma żadnej alternatywy.
Wdrażanie przy użyciu interfejsu wiersza polecenia dla deweloperów platformy Azure
Uwierzytelnianie przy użyciu Azure (jeśli jeszcze tego nie zrobiono):
azd auth loginZ
samples/scenarios/WorkItemFilteringSplitActivitiesuruchom polecenie:azd upPo wyświetleniu monitu w terminalu podaj następujące parametry:
Parameter Opis Nazwa środowiska Prefiks grupy zasobów utworzony do przechowywania wszystkich zasobów platformy Azure. Lokalizacja platformy Azure Lokalizacja Azure dla Twoich zasobów. Subskrypcja platformy Azure Subskrypcja platformy Azure dla twoich zasobów.
Polecenie azd up aprowizuje zasoby platformy Azure i wdraża cztery konteneryzowane usługi z tej próbki: klient, pracownik orkiestratora, pracownik weryfikatora i pracownik wysyłki.
Potwierdzanie pomyślnego wdrożenia
W danych wyjściowych
azd upskopiuj nazwę grupy zasobów.W witrynie Azure Portal otwórz grupę zasobów.
Dla każdej wdrożonej aplikacji kontenera (
client,orchestrator-worker,validator-worker,shipper-worker), otwórz Monitorowanie>przepływ dziennika.Sprawdź, czy każda aplikacja rejestruje tylko oczekiwane elementy robocze:
-
orchestrator-worker: proces orkiestracji. -
validator-worker:ValidateOrderdziałanie. -
shipper-worker:ShipOrderdziałanie.
-
Note
Każda aplikacja kontenerowa jest skonfigurowana przy użyciu reguły skalowania KEDA (azure-durabletask-scheduler), która automatycznie skaluje pracowników z 0 do 10 replik w oparciu o zaległości w kolejce elementów roboczych. Gdy klient zakończy pętlę i nie pozostaną żadne elementy robocze, pracownicy zmniejszają się do zera. Aby uzyskać więcej informacji, znajdziesz Durable Task Scheduler automatyczne skalowanie w Azure Container Apps.
Zrozum kod filtrowania zadań w C #
Orkiestracja wywołuje dwie aktywności jedna po drugiej. Planista kieruje każdy element roboczy procesu do pracownika, który go zarejestrował.
public override async Task<string> RunAsync(TaskOrchestrationContext context, string orderId)
{
string validationResult = await context.CallActivityAsync<string>("ValidateOrder", orderId);
string shippingResult = await context.CallActivityAsync<string>("ShipOrder", orderId);
return $"Order '{orderId}' => Validation: [{validationResult}], Shipping: [{shippingResult}]";
}
Każdy pracownik rejestruje tylko swoje zadania lokalne. SDK automatycznie generuje filtry elementów roboczych na podstawie rejestru zadań, więc nie musisz jawnie włączać tej funkcji.
builder.Services.AddDurableTaskWorker()
.AddTasks(registry =>
{
// Only this worker's tasks are registered.
// Work item filters are auto-generated from the registry, so this
// worker only receives matching work items.
registry.AddAllGeneratedTasks();
})
.UseDurableTaskScheduler(connectionString);
Note
W SDK .NET Durable Task filtry są automatycznie generowane z rejestrów każdego pracownika. Aby zastąpić wygenerowane filtry lub wyłączyć filtrowanie, wywołaj odpowiednio UseWorkItemFilters(customFilters) lub UseWorkItemFilters(null).
Przykład:
-
OrchestratorWorkerrejestrujeOrderProcessingOrchestration. -
ValidatorWorkerrejestrujeValidateOrder. -
ShipperWorkerrejestrujeShipOrder.
Gdy pracownik nawiązuje połączenie z usługą Durable Task Scheduler, zestaw SDK wysyła listę filtrów. Planista tworzy kolejki przypisane do filtru i przekierowuje każde zadanie robocze do odpowiedniej kolejki. Pracownicy nigdy nie otrzymują typów elementów roboczych, których nie zarejestrowali.
Uprzątnij zasoby
Zatrzymaj lokalny kontener emulatora.
docker rm -f dts-emulatorJeśli wdrożono na platformie Azure, zidentyfikuj nazwę grupy zasobów:
- Skopiuj je z outputu
azd up. - Możesz także użyć globalnego pola wyszukiwania w portalu Azure u góry i wyszukać prefiks nazwy środowiska lub jego nazwę.
- Skopiuj je z outputu
Otwórz grupę zasobów z wyników wyszukiwania.
Wybierz pozycję Usuń grupę zasobów, wprowadź nazwę grupy zasobów, aby potwierdzić, a następnie wybierz pozycję Usuń.
Następne kroki
- Skonfiguruj i uruchom emulator narzędzia Durable Task Scheduler na potrzeby programowania lokalnego.
- Uruchom pracowników programu Orchestrator, Validator i Shipper oraz klienta.
- Sprawdź, czy elementy robocze są kierowane tylko do pasujących pracowników.
- Wdróż przykład w usłudze Azure Container Apps przy użyciu interfejsu wiersza polecenia dla deweloperów platformy Azure.
Wymagania wstępne
Przed rozpoczęciem:
- Java 21 lub nowsza.
- Docker do uruchamiania emulatora.
- Azure Developer CLI
- Klonuj repozytorium Durable Task Scheduler z GitHub.
Przygotowywanie projektu
Z katalogu Azure-Samples/Durable-Task-Scheduler głównego przejdź do przykładowego katalogu:
cd samples/scenarios/WorkItemFilteringSplitActivitiesJava
Uruchamianie lokalnie za pomocą emulatora
Pobierz obraz emulatora.
docker pull mcr.microsoft.com/dts/dts-emulator:latestUruchom emulator.
docker run -d --name dts-emulator -p 8080:8080 -p 8082:8082 mcr.microsoft.com/dts/dts-emulator:latestSkompiluj przykład.
./gradlew buildUruchom każdego worker'a w osobnym terminalu:
Terminal 1 — proces roboczy programu Orchestrator
./gradlew :orchestrator-worker:runTerminal 2 — pracownik walidacji
./gradlew :validator-worker:runTerminal 3 — pracownik nadawcy
./gradlew :shipper-worker:runW czwartym terminalu uruchom klienta.
./gradlew :client:runOtwórz pulpit nawigacyjny emulatora pod adresem ,
http://localhost:8082aby monitorować aktywność orkiestracji.
Oczekiwane dane wyjściowe z filtrowania elementów roboczych
Klient planuje uruchomienie zestawu trzech orkiestracji co 30 sekund i powtarza ten proces przez około 10 minut. Na wszystkich terminalach widzisz:
- Klient planuje partie orkiestracji i czeka na zakończenie każdej partii. Ukończona partia rejestruje
3 completed, 0 failed. - Proces roboczy programu Orchestrator wysyła wywołania działań
ValidateOrderiShipOrder. - Pracownik Validatora obsługuje wyłącznie
ValidateOrderzadania związane z aktywnością. - Pracownik Transportera zajmuje się wyłącznie
ShipOrderzadaniami dotyczącymi czynności.
To zachowanie potwierdza, że filtrowanie elementów roboczych kieruje elementy tylko do pracowników, którzy zarejestrowali pasujące typy zadań.
Gdy zobaczysz przynajmniej jeden raport 3 completed, 0 failedpartii, próbka działa zgodnie z oczekiwaniami. Nie musisz czekać na zakończenie pełnej pętli – naciśnij Ctrl+C w każdym terminalu, aby zatrzymać klienta i pracowników. Jeśli pozwolisz klientowi działać do końca, wyświetli końcowe podsumowanie wyników, a następnie pozostanie uruchomiony, dopóki nie zatrzymasz go za pomocą Ctrl+C.
Wypróbuj: eksperyment dotyczący routingu ścisłego
Aby zobaczyć, że routing jest rygorystyczny (brak powrotu do innych procesów roboczych):
- Zatrzymaj proces Shipper worker (Ctrl+C w terminalu 3).
- Uruchom ponownie klienta, aby zaplanować nowe aranżacje.
- Zwróć uwagę, że:
- Proces roboczy programu Orchestrator pobiera i uruchamia aranżacje.
- Pracownik walidacji uzupełnia
ValidateOrderdla każdego zamówienia. -
ShipOrderzadania pozostają w trakcie oczekiwania – pracownicy Validatora i Orchestratora ich nie otrzymują. - Orkiestracje pozostają w statusie "Działa", czekając na
ShipOrderzakończenie.
- Uruchom ponownie proces roboczy Shipper — oczekujące
ShipOrderelementy pracy są dostarczane natychmiast, a orkiestracje zostają ukończone.
Ten eksperyment pokazuje, że zadania są kierowane tylko do pracowników z pasującymi filtrami. Nie ma żadnej alternatywy.
Wdrażanie przy użyciu interfejsu wiersza polecenia dla deweloperów platformy Azure
Uwierzytelnianie przy użyciu Azure (jeśli jeszcze tego nie zrobiono):
azd auth loginZ
samples/scenarios/WorkItemFilteringSplitActivitiesJavauruchom polecenie:azd upPo wyświetleniu monitu w terminalu podaj następujące parametry:
Parameter Opis Nazwa środowiska Prefiks grupy zasobów utworzony do przechowywania wszystkich zasobów platformy Azure. Lokalizacja platformy Azure Lokalizacja Azure dla Twoich zasobów. Subskrypcja platformy Azure Subskrypcja platformy Azure dla twoich zasobów.
Polecenie azd up aprowizuje zasoby platformy Azure i wdraża cztery konteneryzowane usługi z tej próbki: klient, pracownik orkiestratora, pracownik weryfikatora i pracownik wysyłki.
Potwierdzanie pomyślnego wdrożenia
W danych wyjściowych
azd upskopiuj nazwę grupy zasobów.W witrynie Azure Portal otwórz grupę zasobów.
Dla każdej wdrożonej aplikacji kontenera (
client,orchestrator-worker,validator-worker,shipper-worker), otwórz Monitorowanie>przepływ dziennika.Sprawdź, czy każda aplikacja rejestruje tylko oczekiwane elementy robocze:
-
orchestrator-worker: proces orkiestracji. -
validator-worker:ValidateOrderdziałanie. -
shipper-worker:ShipOrderdziałanie.
-
Note
Każda aplikacja kontenerowa jest skonfigurowana przy użyciu reguły skalowania KEDA (azure-durabletask-scheduler), która automatycznie skaluje pracowników z 0 do 10 replik w oparciu o zaległości w kolejce elementów roboczych. Gdy klient zakończy pętlę i nie pozostaną żadne elementy robocze, pracownicy zmniejszają się do zera. Aby uzyskać więcej informacji, znajdziesz Durable Task Scheduler automatyczne skalowanie w Azure Container Apps.
Zrozum kod filtrowania zadań w Javi
Orkiestracja wywołuje dwie aktywności jedna po drugiej. Planista kieruje każdy element roboczy procesu do pracownika, który go zarejestrował.
String validationResult = ctx.callActivity("ValidateOrder", orderId, String.class).await();
String shippingResult = ctx.callActivity("ShipOrder", orderId, String.class).await();
String combined = String.format("Order '%s' => Validation: [%s], Shipping: [%s]",
orderId, validationResult, shippingResult);
ctx.complete(combined);
Każdy komputer roboczy rejestruje jedynie swoje lokalne zadania i wywołuje useWorkItemFilters(), aby wyrazić zgodę na filtrowanie. Następnie zestaw SDK generuje filtry elementów roboczych z rejestru zadań.
DurableTaskGrpcWorker worker = DurableTaskSchedulerWorkerExtensions
.createWorkerBuilder(connectionString)
.addActivity(new TaskActivityFactory() {
// ...
})
.useWorkItemFilters() // auto-generate from registered tasks
.build();
Note
Każdy pracownik musi wyraźnie wywołać useWorkItemFilters() , aby włączyć filtrowanie. Pracownicy, którzy nie korzystają z tego obowiązku, otrzymują wszystkie typy zadań.
Przykład:
-
OrchestratorWorkerrejestrujeOrderProcessingOrchestration. -
ValidatorWorkerrejestrujeValidateOrder. -
ShipperWorkerrejestrujeShipOrder.
Gdy pracownik nawiązuje połączenie z usługą Durable Task Scheduler, zestaw SDK wysyła listę filtrów. Planista tworzy kolejki przypisane do filtru i przekierowuje każde zadanie robocze do odpowiedniej kolejki. Pracownicy nigdy nie otrzymują typów elementów roboczych, których nie zarejestrowali.
Aby podać jawnie określone filtry zamiast generować je automatycznie z rejestru, przekaż WorkItemFilter do useWorkItemFilters():
WorkItemFilter filter = WorkItemFilter.newBuilder()
.addOrchestration("OrderProcessingOrchestration")
.addActivity("ValidateOrder")
.build();
builder.useWorkItemFilters(filter);
Uprzątnij zasoby
Zatrzymaj lokalny kontener emulatora.
docker rm -f dts-emulatorJeśli wdrożono na platformie Azure, zidentyfikuj nazwę grupy zasobów:
- Skopiuj je z outputu
azd up. - Możesz także użyć globalnego pola wyszukiwania w portalu Azure u góry i wyszukać prefiks nazwy środowiska lub jego nazwę.
- Skopiuj je z outputu
Otwórz grupę zasobów z wyników wyszukiwania.
Wybierz pozycję Usuń grupę zasobów, wprowadź nazwę grupy zasobów, aby potwierdzić, a następnie wybierz pozycję Usuń.
Następne kroki
- Skonfiguruj i uruchom emulator narzędzia Durable Task Scheduler na potrzeby programowania lokalnego.
- Uruchom Pracownika A, Pracownika B i klienta.
- Sprawdź, czy elementy robocze są kierowane tylko do pasujących pracowników.
Wymagania wstępne
Przed rozpoczęciem:
- Python 3.10 lub nowsza.
- Docker do uruchamiania emulatora.
- Azure CLI jeśli używasz wdrożonego harmonogramu Durable Task Scheduler.
- Klonuj repozytorium Durable Task Scheduler z GitHub.
Przygotowywanie projektu
Z katalogu Azure-Samples/Durable-Task-Scheduler głównego przejdź do przykładowego katalogu:
cd samples/durable-task-sdks/python/work-item-filtering
Uruchamianie lokalnie za pomocą emulatora
Pobierz obraz emulatora.
docker pull mcr.microsoft.com/dts/dts-emulator:latestUruchom emulator.
docker run -d --name dts-emulator -p 8080:8080 -p 8082:8082 mcr.microsoft.com/dts/dts-emulator:latestPróbka korzysta z domyślnych ustawień emulatora (endpoint
http://localhost:8080i task hubdefault), więc nie musisz ustawiać żadnych zmiennych środowiskowych.(Opcjonalne) Stwórz i aktywuj środowisko wirtualne Python.
python -m venv venv source venv/bin/activate # On Windows, use: venv\Scripts\activateZainstaluj wymagane pakiety.
pip install -r requirements.txtUruchom każdego worker'a w osobnym terminalu:
Terminal 1 - Pracownik A (powitanie)
python worker_a.pyTerminal 2 - Pracownik B (matematyka)
python worker_b.pyW trzecim terminalu uruchom klienta.
python client.pyOtwórz pulpit nawigacyjny emulatora pod adresem ,
http://localhost:8082aby monitorować aktywność orkiestracji.
Oczekiwane dane wyjściowe z filtrowania elementów roboczych
Klient planuje orkiestrację powitalną i matematyczną, a następnie czeka na zakończenie obu zadań. Na wszystkich terminalach widzisz:
- Pracownik A przetwarza jedynie orkiestrację powitania i jej
say_helloaktywność. - Pracownik B przetwarza jedynie orkiestrację matematyczną i jej
add_numbersaktywność. - Klient drukuje wynik z każdej orkiestracji.
To zachowanie potwierdza, że filtrowanie elementów roboczych kieruje elementy tylko do pracowników, którzy zarejestrowali pasujące typy zadań.
Zrozum kod filtrowania zadań w Pythonie
Każdy komputer roboczy rejestruje jedynie swoje lokalne zadania i wywołuje use_work_item_filters(), aby wyrazić zgodę na filtrowanie. SDK generuje filtry zadań z zarejestrowanych zadań.
worker.add_orchestrator(greeting_orchestrator)
worker.add_activity(say_hello)
worker.use_work_item_filters() # Auto-generate from the registry
Note
Każdy pracownik musi wyraźnie wywołać use_work_item_filters() , aby włączyć filtrowanie. Pracownicy, którzy nie korzystają z tego obowiązku, otrzymują wszystkie typy zadań.
Przykład:
- Pracownik A rejestruje
greeting_orchestratorisay_hello. - Pracownik B rejestruje
math_orchestratoriadd_numbers.
Gdy pracownik nawiązuje połączenie z usługą Durable Task Scheduler, zestaw SDK wysyła listę filtrów. Planista tworzy kolejki przypisane do filtru i przekierowuje każde zadanie robocze do odpowiedniej kolejki. Pracownicy nigdy nie otrzymują typów elementów roboczych, których nie zarejestrowali.
Aby dostarczyć filtry jawne zamiast automatycznie generować je z rejestru, należy przejść WorkItemFilters:
from durabletask.worker import WorkItemFilters, OrchestrationWorkItemFilter, ActivityWorkItemFilter
worker.use_work_item_filters(WorkItemFilters(
orchestrations=[
OrchestrationWorkItemFilter(name="greeting_orchestrator"),
],
activities=[
ActivityWorkItemFilter(name="say_hello"),
],
))
Uprzątnij zasoby
Zatrzymaj lokalny kontener emulatora.
docker rm -f dts-emulator