Quickstart: Een Java Durable Functions-app maken
Gebruik Durable Functions, een functie van Azure Functions, om stateful functies te schrijven in een serverloze omgeving. Durable Functions beheert de status, controlepunten en start deze opnieuw in uw toepassing.
In deze quickstart maakt en test u een Durable Functions-app 'hallo wereld' in Java.
De meest eenvoudige Durable Functions-app heeft drie functies:
- Orchestratorfunctie: een werkstroom die andere functies organiseert.
- Activiteitsfunctie: Een functie die wordt aangeroepen door de orchestratorfunctie, voert werk uit en retourneert eventueel een waarde.
- Clientfunctie: Een reguliere functie in Azure die een orchestratorfunctie start. In dit voorbeeld wordt een door HTTP geactiveerde functie gebruikt.
In deze quickstart worden verschillende manieren beschreven om deze 'hallo wereld'-app te maken. Gebruik de selector boven aan de pagina om uw voorkeursbenadering in te stellen.
Vereisten
U hebt het volgende nodig om deze snelstartgids te voltooien:
De Java Developer Kit versie 8 of hoger geïnstalleerd.
Apache Maven versie 3.0 of hoger geïnstalleerd.
De nieuwste versie van Azure Functions Core Tools.
Voor Azure Functions 4.x is Core Tools versie 4.0.4915 of hoger vereist.
Een HTTP-testprogramma waarmee uw gegevens veilig blijven. Zie HTTP-testhulpprogramma's voor meer informatie.
Een Azure-abonnement. Als u Durable Functions wilt gebruiken, moet u een Azure Storage-account hebben.
Als u geen Azure-abonnement hebt, kunt u een gratis Azure-account maken voordat u begint.
Vereiste afhankelijkheden en invoegtoepassingen toevoegen aan uw project
Voeg de volgende code toe aan uw pom.xml-bestand :
<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>
De vereiste JSON-bestanden toevoegen
Voeg een host.json-bestand toe aan de projectmap. Het moet er ongeveer uitzien als in het volgende voorbeeld:
{
"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)"
}
}
Notitie
Het is belangrijk te weten dat alleen de Azure Functions v4-extensiebundel momenteel de benodigde ondersteuning heeft voor Durable Functions voor Java. Durable Functions voor Java wordt niet ondersteund in v3- en vroege uitbreidingsbundels. Zie de documentatie voor uitbreidingsbundels voor meer informatie over uitbreidingsbundels.
Durable Functions heeft een opslagprovider nodig om runtimestatus op te slaan. Voeg een local.settings.json-bestand toe aan uw projectmap om de opslagprovider te configureren. Als u Azure Storage als provider wilt gebruiken, stelt u de waarde in van AzureWebJobsStorage
het verbindingsreeks van uw Azure Storage-account:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "<your storage account connection string>",
"FUNCTIONS_WORKER_RUNTIME": "java"
}
}
Uw functies maken
De volgende voorbeeldcode toont een basisvoorbeeld van elk type functie:
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();
}
}
Een lokaal project maken met behulp van de Maven-opdracht
Voer de volgende opdracht uit om een project te genereren dat de basisfuncties van een Durable Functions-app bevat:
mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype -DarchetypeVersion=1.62 -Dtrigger=durablefunctions
Geef bij de prompts de volgende informatie op:
Prompt | Actie |
---|---|
groupId | Voer com.function in. |
artifactId | Voer myDurableFunction in. |
version | Selecteer 1.0-SNAPSHOT. |
package | Voer com.function in. |
Y | Voer Y in en selecteer Enter om te bevestigen. |
U hebt nu een lokaal project met de drie functies die zich in een eenvoudige Durable Functions-app bevinden.
Controleer of deze com.microsoft:durabletask-azure-functions
is ingesteld als een afhankelijkheid in uw pom.xml-bestand .
De back-endopslagprovider configureren
Durable Functions heeft een opslagprovider nodig om runtimestatus op te slaan. U kunt Azure Storage instellen als de opslagprovider in local.settings.json. Gebruik de verbindingsreeks van uw Azure-opslagaccount als de waarde voor AzureWebJobsStorage
zoals in dit voorbeeld:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "<your storage account connection string>",
"FUNCTIONS_WORKER_RUNTIME": "java"
}
}
Uw lokale project maken
Selecteer in Visual Studio Code F1 (of selecteer Ctrl/Cmd+Shift+P) om het opdrachtenpalet te openen. Voer bij de prompt (
>
) Azure Functions in en selecteer vervolgens Azure Functions: Nieuw project maken.Selecteer Bladeren. Ga in het dialoogvenster Map selecteren naar een map die u voor uw project wilt gebruiken en kies Selecteren.
Geef bij de prompts de volgende informatie op:
Prompt Actie Een taal selecteren Selecteer Java. Een versie van Java selecteren Selecteer Java 8 of hoger. Selecteer de Java-versie waarop uw functies worden uitgevoerd in Azure en een versie die u lokaal hebt geverifieerd. Een groeps-id opgeven Voer com.function in. Geef een artefact-id op Voer myDurableFunction in. Geef een versie op Voer 1.0-SNAPSHOT in. Geef een pakketnaam op Voer com.function in. Geef een app-naam op Voer myDurableFunction in. Het buildhulpprogramma voor een Java-project selecteren Selecteer Maven. Selecteer hoe u uw project wilt openen Selecteer Openen in nieuw venster.
U hebt nu een project met een voorbeeld van een HTTP-functie. U kunt deze functie desgewenst verwijderen, omdat u in de volgende stap de basisfuncties van een Durable Functions-app toevoegt.
Functies toevoegen aan het project
Voer in het opdrachtpalet Azure Functions in en selecteer vervolgens Azure Functions: Functie maken.
Selecteer Alles voor het filter Sjabloon wijzigen.
Geef bij de prompts de volgende informatie op:
Prompt Actie Selecteer een sjabloon voor uw functie Selecteer DurableFunctionsOrchestration. Geef een pakketnaam op Voer com.function in. Geef een functienaam op Voer DurableFunctionsOrchestrator in. Kies in het dialoogvenster Opslagaccount selecteren om een opslagaccount in te stellen en volg de aanwijzingen.
U moet nu beschikken over de drie basisfuncties die zijn gegenereerd voor een Durable Functions-app.
Pom.xml en host.json configureren
Voeg de volgende afhankelijkheid toe aan uw pom.xml-bestand :
<dependency>
<groupId>com.microsoft</groupId>
<artifactId>durabletask-azure-functions</artifactId>
<version>1.0.0</version>
</dependency>
Voeg de extensions
eigenschap toe aan uw host.json-bestand :
"extensions": { "durableTask": { "hubName": "JavaTestHub" }}
De functie lokaal testen
Azure Functions Core Tools biedt u de mogelijkheid om een Azure Functions-project uit te voeren op uw lokale ontwikkelcomputer.
Notitie
Durable Functions voor Java vereist Azure Functions Core Tools versie 4.0.4915 of hoger. U kunt zien welke versie is geïnstalleerd door de func --version
opdracht uit te voeren in de terminal.
Als u Visual Studio Code gebruikt, opent u een nieuw terminalvenster en voert u de volgende opdrachten uit om het project te bouwen:
mvn clean package
Voer vervolgens de duurzame functie uit:
mvn azure-functions:run
Kopieer in het terminalvenster het URL-eindpunt van uw door HTTP geactiveerde functie.
Gebruik een HTTP-testhulpprogramma om een HTTP POST-aanvraag naar het URL-eindpunt te verzenden.
Het antwoord moet er ongeveer uitzien als in het volgende voorbeeld:
{ "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..." }
Het antwoord is het eerste resultaat van de HTTP-functie. U weet dat de duurzame indeling is gestart. Het eindresultaat van de indeling wordt nog niet weergegeven. De reactie bevat enkele nuttige URL's. Op dit moment voert u een query uit op de status van de indeling.
Kopieer de URL-waarde voor
statusQueryGetUri
, plak deze in de adresbalk van uw browser en voer de aanvraag uit. U kunt ook het HTTP-testprogramma blijven gebruiken om de GET-aanvraag uit te voeren.De aanvraag voert een query uit op het indelingsexemplaar voor de status. U ziet dat het exemplaar is voltooid en dat het de uitvoer of resultaten van de duurzame functie bevat, zoals in dit voorbeeld:
{ "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" }