Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Gebruik Durable Functions, een functie van Azure Functions, om stateful functies te schrijven in een serverloze omgeving. Durable Functions de status, controlepunten en het opnieuw opstarten in uw toepassing beheert.
In deze snelstartgids 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.
- Client, functie: Een normale functie in Azure waarmee een orchestratorfunctie wordt gestart. 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.
Vereiste voorwaarden
U hebt het volgende nodig om deze quickstart 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-account hebt, maak dan een gratis account aan 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)"
}
}
Opmerking
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 van AzureWebJobsStorage in op de 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:
| Snel | Action |
|---|---|
| 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 opslagprovider voor de back-end 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: Nieuw project maken.
Kies Bladeren. In het dialoogvenster Map selecteren, navigeer naar een map die u voor uw project wilt gebruiken en kies Selecteren.
Geef bij de prompts de volgende informatie op:
Snel Action Een taal selecteren Selecteer Java. Selecteer een versie van Java 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. Selecteer de buildtool voor het Java-project 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: Functie maken in en selecteer deze.
Selecteer voor Sjabloonfilter wijzigen de optie Alles.
Geef bij de prompts de volgende informatie op:
Snel Action 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.
Opmerking
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 packageVoer vervolgens de duurzame functie uit:
mvn azure-functions:runKopieer 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. Het laat u weten dat de duurzame orkestratie succesvol is gestart. Het eindresultaat van de orkestratie wordt nog niet weergegeven. De reactie bevat enkele nuttige URL's. Vraag voor nu de status van de orchestratie op.
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.Het verzoek vraagt de orchestratie-instantie om de status. U zou moeten zien dat de instance is voltooid en dat het de outputs of resultaten van de durable function 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" }