Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Använd Durable Functions, en funktion i Azure Functions, för att skriva tillståndskänsliga serverlösa arbetsflöden i Java. I den här snabbstarten ska du klona och köra en exempelapp som visar två vanliga orkestreringsmönster:
- Funktionskedjning: Anropar aktiviteter i följd (Tokyo → Seattle → London).
- Fan-out/fan-in: Anropar aktiviteter parallellt i fem städer och sammanställer sedan resultatet.
När du är klar kommer båda orkestreringarna att köras lokalt med Durable Task Scheduler-emulatorn, och du kan se deras status på instrumentpanelen.
- Klona och förbered Hello Cities-exempelprojektet.
- Konfigurera Durable Task Scheduler-emulatorn och Azurite för lokal utveckling.
- Skapa och kör funktionsappen och utlös båda orkestreringarna.
- Granska orkestreringsstatus och utdata i instrumentpanelen för Durable Task Scheduler.
Förutsättningar
- Java 11+ (JDK) installerat.
- Apache Maven 3.0 eller senare.
- Azure Functions Core Tools v4 eller senare.
- Docker för att köra emulatorn och Azurite.
- Klona Durable Task Scheduler GitHub-lagringsplatsen för att använda snabbstartsexemplet.
Konfigurera Durable Task Scheduler-emulatorn
Durable Task Scheduler-emulatorn tillhandahåller en lokal utvecklingsmiljö så att du kan testa orkestreringar utan en Azure prenumeration. Värden för Java Functions kräver också Azurite för lokal lagring.
Starta båda containrarna:
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
När emulatorn körs kan du komma åt instrumentpanelen Durable Task Scheduler på http://localhost:8082 för att övervaka orkestreringar.
Kör snabbstartsexemplet
Gå till exempelkatalogen Hello Cities:
cd samples/durable-functions/java/HelloCitiesKontrollera att
local.settings.jsonfilen innehåller följande konfiguration:{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "java", "DURABLE_TASK_SCHEDULER_CONNECTION_STRING": "Endpoint=http://localhost:8080;TaskHub=default;Authentication=None" } }Bygg projektet:
mvn clean packageStarta funktionsappen:
mvn azure-functions:runI ett separat terminalfönster startar du orkestreringen för function chaining:
$response = Invoke-RestMethod -Method POST -Uri http://localhost:7071/api/StartChaining $responseSvaret innehåller status-URL:er för orkestreringsinstansen. Kopiera värdet
statusQueryGetUrioch kör det för att kontrollera resultatet:Invoke-RestMethod -Uri $response.statusQueryGetUriUtlös fan-out/fan-in-orkestreringen :
$response = Invoke-RestMethod -Method POST -Uri http://localhost:7071/api/StartFanOutFanIn Invoke-RestMethod -Uri $response.statusQueryGetUri
Förväntade utdata
POST-begäran returnerar ett JSON-svar med status-URL:er. Ett exempel:
{
"id": "<instanceId>",
"statusQueryGetUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/<instanceId>?code=...",
"sendEventPostUri": "...",
"terminatePostUri": "...",
"purgeHistoryDeleteUri": "..."
}
När du gör en fråga mot statusQueryGetUri och orkestreringens runtimeStatus är Completed, kan du hitta hälsningsresultaten i fältet output. Kedjningsorkestreringen returnerar:
{
"name": "ChainingOrchestration",
"runtimeStatus": "Completed",
"output": "Hello Tokyo! Hello Seattle! Hello London!"
}
Fan-out/fan-in-orkestreringen returnerar:
{
"name": "FanOutFanInOrchestration",
"runtimeStatus": "Completed",
"output": ["Hello Tokyo!", "Hello Seattle!", "Hello London!", "Hello Paris!", "Hello Berlin!"]
}
Tip
Om runtimeStatus visar Running eller Pendingväntar du en stund och frågar statusQueryGetUri igen.
Öppna instrumentpanelen för Durable Task Scheduler på http://localhost:8082 om du vill visa orkestreringsstatus och körningshistorik.
Förstå koden
Exempelprojektet i src/main/java/com/example/Functions.java innehåller alla tre funktionstyper som behövs för en Durable Functions app.
Aktivitetsfunktion
Aktiviteten SayHello tar ett stadsnamn och returnerar en hälsning:
@FunctionName("SayHello")
public String sayHello(
@DurableActivityTrigger(name = "city") String city) {
return "Hello " + city + "!";
}
Orkestratorfunktioner
Den sammanlänkande orkestratorn anropar SayHello sekventiellt för tre städer:
@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;
}
Fan-out/fan-in orchestrator schemalägger aktiviteter parallellt:
@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;
}
Klientfunktioner
Klientfunktioner som utlöses via HTTP startar varje orkestrering:
@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);
}
Konfiguration
Exemplet använder Durable Task Scheduler-emulatorn som lagringsbackend. Detta konfigureras i host.json:
{
"extensions": {
"durableTask": {
"hubName": "default",
"storageProvider": {
"type": "azureManaged",
"connectionStringName": "DURABLE_TASK_SCHEDULER_CONNECTION_STRING"
}
}
}
}
Emulatorns anslutningssträng anges i local.settings.json:
{
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "java",
"DURABLE_TASK_SCHEDULER_CONNECTION_STRING": "Endpoint=http://localhost:8080;TaskHub=default;Authentication=None"
}
}
Rensa resurser
Stoppa emulatorcontainrarna när du är klar:
docker stop dtsemulator azurite && docker rm dtsemulator azurite