Snabbstart: Skapa en Java Durable Functions-app
Använd Durable Functions, en funktion i Azure Functions, för att skriva tillståndskänsliga funktioner i en serverlös miljö. Durable Functions hanterar tillstånd, kontrollpunkter och omstarter i ditt program.
I den här snabbstarten skapar och testar du en "hello world" Durable Functions-app i Java.
Den mest grundläggande Durable Functions-appen har tre funktioner:
- Orchestrator-funktion: Ett arbetsflöde som samordnar andra funktioner.
- Aktivitetsfunktion: En funktion som anropas av orkestreringsfunktionen, utför arbete och som eventuellt returnerar ett värde.
- Klientfunktion: En vanlig funktion i Azure som startar en orchestrator-funktion. I det här exemplet används en HTTP-utlöst funktion.
Den här snabbstarten beskriver olika sätt att skapa den här "hello world"-appen. Använd väljaren överst på sidan för att ange önskad metod.
Förutsättningar
Följande krävs för att slutföra den här snabbstarten:
Java Developer Kit version 8 eller senare installerat.
Apache Maven version 3.0 eller senare installerat.
Den senaste versionen av Azure Functions Core Tools.
För Azure Functions 4.x krävs Core Tools version 4.0.4915 eller senare.
Ett HTTP-testverktyg som skyddar dina data. Mer information finns i HTTP-testverktyg.
En Azure-prenumeration Om du vill använda Durable Functions måste du ha ett Azure Storage-konto.
Om du inte har en Azure-prenumeration skapar du ett kostnadsfritt Azure-konto innan du börjar.
Lägga till nödvändiga beroenden och plugin-program i projektet
Lägg till följande kod i din pom.xml-fil :
<properties>
<azure.functions.maven.plugin.version>1.18.0</azure.functions.maven.plugin.version>
<azure.functions.java.library.version>3.0.0</azure.functions.java.library.version>
<durabletask.azure.functions>1.0.0</durabletask.azure.functions>
<functionAppName>your-unique-app-name</functionAppName>
</properties>
<dependencies>
<dependency>
<groupId>com.microsoft.azure.functions</groupId>
<artifactId>azure-functions-java-library</artifactId>
<version>${azure.functions.java.library.version}</version>
</dependency>
<dependency>
<groupId>com.microsoft</groupId>
<artifactId>durabletask-azure-functions</artifactId>
<version>${durabletask.azure.functions}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
</plugin>
<plugin>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-functions-maven-plugin</artifactId>
<version>${azure.functions.maven.plugin.version}</version>
<configuration>
<appName>${functionAppName}</appName>
<resourceGroup>java-functions-group</resourceGroup>
<appServicePlanName>java-functions-app-service-plan</appServicePlanName>
<region>westus</region>
<runtime>
<os>windows</os>
<javaVersion>11</javaVersion>
</runtime>
<appSettings>
<property>
<name>FUNCTIONS_EXTENSION_VERSION</name>
<value>~4</value>
</property>
</appSettings>
</configuration>
<executions>
<execution>
<id>package-functions</id>
<goals>
<goal>package</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
</plugins>
</build>
Lägg till nödvändiga JSON-filer
Lägg till en host.json fil i projektkatalogen. Det bör se ut ungefär som i följande exempel:
{
"version": "2.0",
"logging": {
"logLevel": {
"DurableTask.AzureStorage": "Warning",
"DurableTask.Core": "Warning"
}
},
"extensions": {
"durableTask": {
"hubName": "JavaTestHub"
}
},
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[4.*, 5.0.0)"
}
}
Kommentar
Observera att endast Azure Functions v4-tilläggspaketet för närvarande har det stöd som krävs för Durable Functions för Java. Durable Functions för Java stöds inte i v3- och tidiga tilläggspaket. Mer information om tilläggspaket finns i dokumentationen om tilläggspaket.
Durable Functions behöver en lagringsprovider för att lagra körningstillstånd. Lägg till en local.settings.json fil i projektkatalogen för att konfigurera lagringsprovidern. Om du vill använda Azure Storage som provider anger du värdet AzureWebJobsStorage
för till niska veze för ditt Azure Storage-konto:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "<your storage account connection string>",
"FUNCTIONS_WORKER_RUNTIME": "java"
}
}
Skapa dina funktioner
Följande exempelkod visar ett grundläggande exempel på varje typ av funktion:
import com.microsoft.azure.functions.annotation.*;
import com.microsoft.azure.functions.*;
import java.util.*;
import com.microsoft.durabletask.*;
import com.microsoft.durabletask.azurefunctions.DurableActivityTrigger;
import com.microsoft.durabletask.azurefunctions.DurableClientContext;
import com.microsoft.durabletask.azurefunctions.DurableClientInput;
import com.microsoft.durabletask.azurefunctions.DurableOrchestrationTrigger;
public class DurableFunctionsSample {
/**
* This HTTP-triggered function starts the orchestration.
*/
@FunctionName("StartOrchestration")
public HttpResponseMessage startOrchestration(
@HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> request,
@DurableClientInput(name = "durableContext") DurableClientContext durableContext,
final ExecutionContext context) {
context.getLogger().info("Java HTTP trigger processed a request.");
DurableTaskClient client = durableContext.getClient();
String instanceId = client.scheduleNewOrchestrationInstance("Cities");
context.getLogger().info("Created new Java orchestration with instance ID = " + instanceId);
return durableContext.createCheckStatusResponse(request, instanceId);
}
/**
* This is the orchestrator function, which can schedule activity functions, create durable timers,
* or wait for external events in a way that's completely fault-tolerant.
*/
@FunctionName("Cities")
public String citiesOrchestrator(
@DurableOrchestrationTrigger(name = "taskOrchestrationContext") TaskOrchestrationContext ctx) {
String result = "";
result += ctx.callActivity("Capitalize", "Tokyo", String.class).await() + ", ";
result += ctx.callActivity("Capitalize", "London", String.class).await() + ", ";
result += ctx.callActivity("Capitalize", "Seattle", String.class).await() + ", ";
result += ctx.callActivity("Capitalize", "Austin", String.class).await();
return result;
}
/**
* This is the activity function that is invoked by the orchestrator function.
*/
@FunctionName("Capitalize")
public String capitalize(@DurableActivityTrigger(name = "name") String name, final ExecutionContext context) {
context.getLogger().info("Capitalizing: " + name);
return name.toUpperCase();
}
}
Skapa ett lokalt projekt med hjälp av Maven-kommandot
Kör följande kommando för att generera ett projekt som innehåller de grundläggande funktionerna i en Durable Functions-app:
mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype -DarchetypeVersion=1.51 -Dtrigger=durablefunctions
Ange följande information vid anvisningarna:
Prompt | Åtgärd |
---|---|
groupId | Ange com.function. |
artifactId | Ange myDurableFunction. |
version | Välj 1.0-SNAPSHOT. |
paket | Ange com.function. |
Y | Ange Y och välj Retur för att bekräfta. |
Nu har du ett lokalt projekt som har de tre funktionerna som finns i en grundläggande Durable Functions-app.
Kontrollera att com.microsoft:durabletask-azure-functions
är inställt som ett beroende i din pom.xml-fil .
Konfigurera serverdelslagringsprovidern
Durable Functions behöver en lagringsprovider för att lagra körningstillstånd. Du kan ange Azure Storage som lagringsprovider i local.settings.json. Använd niska veze för ditt Azure Storage-konto som värde för AzureWebJobsStorage
som i det här exemplet:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "<your storage account connection string>",
"FUNCTIONS_WORKER_RUNTIME": "java"
}
}
Skapa ditt lokala projekt
I Visual Studio Code väljer du F1 (eller ctrl/cmd+Skift+P) för att öppna kommandopaletten. I kommandotolken (
>
) anger du och väljer sedan Azure Functions: Create New Project (Skapa nytt projekt).Välj bläddra. I dialogrutan Välj mapp går du till en mapp som ska användas för projektet och väljer sedan Välj.
Ange följande information vid anvisningarna:
Prompt Åtgärd Välj ett språk Välj Java. Välj en version av Java Välj Java 8 eller senare. Välj den Java-version som funktionerna körs på i Azure och en som du har verifierat lokalt. Ange ett grupp-ID Ange com.function. Ange ett artefakt-ID Ange myDurableFunction. Ange en version Ange 1.0-SNAPSHOT. Ange ett paketnamn Ange com.function. Ange ett appnamn Ange myDurableFunction. Välj byggverktyget för Java-projektet Välj Maven. Välj hur du vill öppna projektet Välj Öppna i nytt fönster.
Nu har du ett projekt som har en HTTP-exempelfunktion. Du kan ta bort den här funktionen om du vill eftersom du lägger till de grundläggande funktionerna i en Durable Functions-app i nästa steg.
Lägga till funktioner i projektet
I kommandopaletten anger du och väljer sedan Azure Functions: Create Function (Azure Functions: Create Function).
För Ändra mallfilter väljer du Alla.
Ange följande information vid anvisningarna:
Prompt Åtgärd Välj en mall för din funktion Välj DurableFunctionsOrchestration. Ange ett paketnamn Ange com.function. Ange ett funktionsnamn Ange DurableFunctionsOrchestrator. I dialogrutan väljer du Välj lagringskonto för att konfigurera ett lagringskonto och följer sedan anvisningarna.
Nu bör du ha de tre grundläggande funktionerna som genererats för en Durable Functions-app.
Konfigurera pom.xml och host.json
Lägg till följande beroende i din pom.xml-fil :
<dependency>
<groupId>com.microsoft</groupId>
<artifactId>durabletask-azure-functions</artifactId>
<version>1.0.0</version>
</dependency>
Lägg till egenskapen i extensions
din host.json-fil :
"extensions": { "durableTask": { "hubName": "JavaTestHub" }}
Testa funktionen lokalt
Med Azure Functions Core Tools kan du köra ett Azure Functions-projekt på din lokala utvecklingsdator.
Kommentar
Durable Functions för Java kräver Azure Functions Core Tools version 4.0.4915 eller senare. Du kan se vilken version som installeras genom att func --version
köra kommandot i terminalen.
Om du använder Visual Studio Code öppnar du ett nytt terminalfönster och kör följande kommandon för att skapa projektet:
mvn clean package
Kör sedan den hållbara funktionen:
mvn azure-functions:run
I terminalpanelen kopierar du URL-slutpunkten för din HTTP-utlösta funktion.
Använd ett HTTP-testverktyg för att skicka en HTTP POST-begäran till URL-slutpunkten.
Svaret bör se ut ungefär som i följande exempel:
{ "id": "d1b33a60-333f-4d6e-9ade-17a7020562a9", "purgeHistoryDeleteUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/d1b33a60-333f-4d6e-9ade-17a7020562a9?code=ACCupah_QfGKo...", "sendEventPostUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/d1b33a60-333f-4d6e-9ade-17a7020562a9/raiseEvent/{eventName}?code=ACCupah_QfGKo...", "statusQueryGetUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/d1b33a60-333f-4d6e-9ade-17a7020562a9?code=ACCupah_QfGKo...", "terminatePostUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/d1b33a60-333f-4d6e-9ade-17a7020562a9/terminate?reason={text}&code=ACCupah_QfGKo..." }
Svaret är HTTP-funktionens första resultat. Det låter dig veta att den varaktiga orkestreringen har startats. Det visar ännu inte slutresultatet av orkestreringen. Svaret innehåller några användbara URL:er. För tillfället frågar du orkestreringens status.
Kopiera URL-värdet för
statusQueryGetUri
, klistra in det i webbläsarens adressfält och kör begäran. Du kan också fortsätta att använda HTTP-testverktyget för att utfärda GET-begäran.Begäran frågar orkestreringsinstansen om statusen. Du bör se att instansen har slutförts och att den innehåller utdata eller resultat från den varaktiga funktionen, som i det här exemplet:
{ "name": "Cities", "instanceId": "d1b33a60-333f-4d6e-9ade-17a7020562a9", "runtimeStatus": "Completed", "input": null, "customStatus": "", "output":"TOKYO, LONDON, SEATTLE, AUSTIN", "createdTime": "2022-12-12T05:00:02Z", "lastUpdatedTime": "2022-12-12T05:00:06Z" }