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.
Pomocí Durable Functions, funkce Azure Functions, můžete psát stavové bezserverové pracovní postupy v Java. V tomto rychlém startu naklonujete a spustíte ukázkovou aplikaci, která ukazuje dva běžné vzory orchestrace:
- Řetězení funkcí: Volá aktivity postupně (Tokio → Seattle → Londýn).
- Fan-out/fan-in: Volá aktivity paralelně napříč pěti městy a pak agreguje výsledky.
Na konci budete mít obě orchestrace spuštěné lokálně pomocí emulátoru Durable Task Scheduler a budete moct zobrazit jejich stav na dashboardu.
- Naklonujte a připravte ukázkový projekt Hello Cities.
- Nastavte emulátor plánovače úloh Durable a Azurite pro místní vývoj.
- Sestavte a spusťte aplikaci funkcí a aktivujte obě orchestrace.
- Zkontrolujte stav orchestrace a výstup na řídicím panelu Plánovače úloh Durable.
Předpoklady
- nainstalovaný Java 11+ (JDK).
- Apache Maven 3.0 nebo novější
- Azure Functions Core Tools v4 nebo novější.
- Docker pro spuštění emulátoru a Azurite.
- Naklonujte úložiště Durable Task Scheduler GitHub a použijte ukázku rychlého startu.
Nastavení emulátoru Plánovače úloh Durable
Emulátor plánovače úloh Durable Task Scheduler poskytuje místní vývojové prostředí, abyste mohli otestovat orchestrace bez předplatného Azure. Hostitel Java Functions také vyžaduje Azurite pro místní úložiště.
Spusťte oba kontejnery:
docker run -d --name dtsemulator -p 8080:8080 -p 8082:8082 \
mcr.microsoft.com/dts/dts-emulator:latest
docker run -d --name azurite -p 10000:10000 -p 10001:10001 -p 10002:10002 \
mcr.microsoft.com/azure-storage/azurite
Tip
Jakmile je emulátor spuštěný, můžete přistupovat k řídicímu panelu Durable Task Scheduler na adrese http://localhost:8082, kde můžete sledovat orchestrace.
Spusťte ukázku pro rychlý start
Přejděte do ukázkového adresáře Hello Cities:
cd samples/durable-functions/java/HelloCitiesOvěřte, že
local.settings.jsonsoubor obsahuje následující konfiguraci:{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "java", "DURABLE_TASK_SCHEDULER_CONNECTION_STRING": "Endpoint=http://localhost:8080;TaskHub=default;Authentication=None" } }Sestavení projektu:
mvn clean packageSpusťte aplikaci funkcí:
mvn azure-functions:runV samostatném terminálu aktivujte orchestraci řetězení funkcí :
$response = Invoke-RestMethod -Method POST -Uri http://localhost:7071/api/StartChaining $responseOdpověď obsahuje stavové adresy URL pro instanci orchestrátoru.
statusQueryGetUriZkopírujte hodnotu a spusťte ji a zkontrolujte výsledek:Invoke-RestMethod -Uri $response.statusQueryGetUriSpusťte orchestraci fan-out/fan-in:
$response = Invoke-RestMethod -Method POST -Uri http://localhost:7071/api/StartFanOutFanIn Invoke-RestMethod -Uri $response.statusQueryGetUri
Očekávaný výstup
Požadavek POST vrátí odpověď JSON s adresami URL stavu. Příklad:
{
"id": "<instanceId>",
"statusQueryGetUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/<instanceId>?code=...",
"sendEventPostUri": "...",
"terminatePostUri": "...",
"purgeHistoryDeleteUri": "..."
}
Když zadáte dotaz na statusQueryGetUri a hodnota runtimeStatus orchestrace je Completed, výsledky pozdravu najdete v poli output. Orchestrace zřetězení vrátí:
{
"name": "ChainingOrchestration",
"runtimeStatus": "Completed",
"output": "Hello Tokyo! Hello Seattle! Hello London!"
}
Orchestrace fan-out/fan-in vrací:
{
"name": "FanOutFanInOrchestration",
"runtimeStatus": "Completed",
"output": ["Hello Tokyo!", "Hello Seattle!", "Hello London!", "Hello Paris!", "Hello Berlin!"]
}
Tip
Pokud se na runtimeStatus zobrazí Running nebo Pending, chvíli počkejte a znovu odešlete dotaz na statusQueryGetUri.
Otevřete řídicí panel Plánovače úloh Durable na adrese http://localhost:8082, abyste zobrazili stav orchestrace a historii spuštění.
Vysvětlení kódu
Ukázkový projekt v src/main/java/com/example/Functions.java obsahuje všechny tři typy funkcí potřebné pro aplikaci Durable Functions.
Funkce aktivity
Aktivita SayHello přebírá název města a vrací pozdrav:
@FunctionName("SayHello")
public String sayHello(
@DurableActivityTrigger(name = "city") String city) {
return "Hello " + city + "!";
}
Funkce orchestratoru
Orchestrátor řetězení postupně volá SayHello pro tři města:
@FunctionName("ChainingOrchestration")
public String chainingOrchestration(
@DurableOrchestrationTrigger(name = "ctx") TaskOrchestrationContext ctx) {
String result = "";
result += ctx.callActivity("SayHello", "Tokyo", String.class).await();
result += " " + ctx.callActivity("SayHello", "Seattle", String.class).await();
result += " " + ctx.callActivity("SayHello", "London", String.class).await();
return result;
}
Orchestrátor fan-out/fan-in plánuje aktivity paralelně:
@FunctionName("FanOutFanInOrchestration")
public List<String> fanOutFanInOrchestration(
@DurableOrchestrationTrigger(name = "ctx") TaskOrchestrationContext ctx) {
String[] cities = {"Tokyo", "Seattle", "London", "Paris", "Berlin"};
List<Task<String>> parallelTasks = new ArrayList<>();
for (String city : cities) {
parallelTasks.add(ctx.callActivity("SayHello", city, String.class));
}
List<String> results = new ArrayList<>();
for (Task<String> task : parallelTasks) {
results.add(task.await());
}
return results;
}
Klientské funkce
Funkce klienta aktivované protokolem HTTP spouští každou orchestraci:
@FunctionName("StartChaining")
public HttpResponseMessage startChaining(
@HttpTrigger(name = "req", methods = {HttpMethod.POST},
authLevel = AuthorizationLevel.ANONYMOUS)
HttpRequestMessage<Void> request,
@DurableClientInput(name = "durableContext") DurableClientContext durableContext) {
DurableTaskClient client = durableContext.getClient();
String instanceId = client.scheduleNewOrchestrationInstance("ChainingOrchestration");
return durableContext.createCheckStatusResponse(request, instanceId);
}
Konfigurace
Ukázka používá emulátor Plánovače úloh Durable jako back-end úložiště. Toto nastavení je nakonfigurováno v host.json:
{
"extensions": {
"durableTask": {
"hubName": "default",
"storageProvider": {
"type": "azureManaged",
"connectionStringName": "DURABLE_TASK_SCHEDULER_CONNECTION_STRING"
}
}
}
}
Připojovací řetězec emulátoru je nastaven v local.settings.json:
{
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "java",
"DURABLE_TASK_SCHEDULER_CONNECTION_STRING": "Endpoint=http://localhost:8080;TaskHub=default;Authentication=None"
}
}
Vyčistěte zdroje
Po dokončení zastavte kontejnery emulátoru:
docker stop dtsemulator azurite && docker rm dtsemulator azurite
Další kroky
- Přečtěte si o vzorech aplikací common Durable Functions.
- Nasazení aplikace Durable Functions do Azure.
- Přečtěte si informace o poskytovateli úložiště Durable Functions.