Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Utilisez Durable Functions, une fonctionnalité de Azure Functions, pour écrire des fonctions avec état dans un environnement serverless. Durable Functions gère l’état, les points de contrôle et les redémarrages dans votre application.
Dans ce guide de démarrage rapide, vous allez créer et tester une application Durable Functions dans Java.
Une application de base Durable Functions a trois fonctions :
-
Fonction d’orchestration (
Cities) : un flux de travail qui orchestre d'autres fonctions. -
Fonction d’activité (
Capitalize) : fonction que l’orchestrateur appelle pour effectuer le travail et retourner une valeur. -
Fonction cliente (
StartOrchestration) : fonction déclenchée par HTTP qui démarre l’orchestrateur.
Ce guide de démarrage rapide offre trois chemins d’installation. Utilisez le sélecteur en haut de la page pour choisir votre approche préférée :
- Configuration manuelle : créez chaque fichier à la main pour un contrôle total sur la structure du projet.
- Commande Maven : Utilisez un archétype Maven pour générer la structure du projet en une seule commande.
- Visual Studio Code : utilisez l’extension vs Code Azure Functions pour générer le projet via une interface utilisateur guidée.
Prerequisites
Pour effectuer ce démarrage rapide, les éléments suivants sont requis :
Le Kit de développement logiciel Java (JDK) version 8 ou ultérieure installé.
Apache Maven version 3.0 ou ultérieure installé.
La version la plus récente d’Azure Functions Core Tools.
Pour Azure Functions 4.x, Core Tools version 4.0.4915 ou ultérieure est requis.
Outil de test HTTP qui sécurise vos données. Pour découvrir plus d’informations, consultez Outils de test HTTP.
Visual Studio Code avec l’extension Azure Functions installée (obligatoire uniquement pour le chemin d’installation Visual Studio Code).
Un abonnement Azure. Pour utiliser Durable Functions, vous devez disposer d’un compte stockage Azure.
Si vous n’avez pas de compte Azure, créez un compte gratuit avant de commencer.
Ajouter les dépendances et plug-ins requis à votre projet
Ajoutez le code suivant à votre fichier pom.xml . Avant de le copier, remplacez your-unique-app-name par un nom d’application de fonction globalement unique. Ajustez region, javaVersionet resourceGroup pour correspondre à votre environnement.
<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>
Ajouter les fichiers JSON requis
Ajoutez un fichier host.json au répertoire de votre projet. Le résultat doit ressembler à l’exemple suivant :
{
"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)"
}
}
Note
Durable Functions pour Java nécessite un bundle d’extensions v4. Les offres groupées antérieures ne sont pas prises en charge. Pour plus d’informations, consultez la documentation sur les bundles d’extensions.
Durable Functions a besoin d’un fournisseur de stockage pour stocker l’état d’exécution. Ajoutez un fichier local.settings.json au répertoire de votre projet pour configurer le fournisseur de stockage. Pour utiliser Stockage Azure comme fournisseur, définissez la valeur de AzureWebJobsStorage sur la chaîne de connexion de votre compte Stockage Azure :
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "<your storage account connection string>",
"FUNCTIONS_WORKER_RUNTIME": "java"
}
}
Important
Le fichier local.settings.json peut contenir des secrets. Veillez à l’ajouter à votre fichier .gitignore pour éviter de le valider dans le contrôle de code source.
Créer vos fonctions d’orchestrateur, d’activité et de client Durable Functions
L’exemple de code suivant montre un exemple de base de chaque type de fonction :
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();
}
}
Créer un projet Durable Functions local à l’aide de la commande Maven
Exécutez la commande suivante pour générer un projet qui contient les fonctions de base d’une application Durable Functions :
mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype -DarchetypeVersion=1.62 -Dtrigger=durablefunctions
En suivant les invites, saisissez les informations suivantes :
| Prompt | Action |
|---|---|
| groupId | Entrez com.function. |
| artifactId | Entrez myDurableFunction. |
| version | Sélectionnez 1.0-SNAPSHOT. |
| paquet | Entrez com.function. |
| Oui | Entrez O, puis sélectionnez Entrée pour confirmer. |
Vous disposez maintenant d’un projet local avec les trois fonctions dans une application Durable Functions de base. L’archétype inclut com.microsoft:durabletask-azure-functions automatiquement comme dépendance dans votre fichier pom.xml .
Configurer le fournisseur de stockage principal pour Durable Functions
Durable Functions a besoin d’un fournisseur de stockage pour stocker l’état d’exécution. Vous pouvez définir Stockage Azure comme fournisseur de stockage dans local.settings.json. Utilisez la chaîne de connexion de votre compte de stockage Azure comme valeur pour AzureWebJobsStorage, comme dans cet exemple :
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "<your storage account connection string>",
"FUNCTIONS_WORKER_RUNTIME": "java"
}
}
Important
Le fichier local.settings.json peut contenir des secrets. Veillez à l’ajouter à votre fichier .gitignore pour éviter de le valider dans le contrôle de code source.
Créer votre projet local
Dans Visual Studio Code, sélectionnez F1 (ou Ctrl/Cmd+Maj+P) pour ouvrir la palette de commandes. À l’invite (
>), entrez, puis sélectionnez Azure Functions : Créer un projet.
Cliquez sur Parcourir. Dans la boîte de dialogue Sélectionner un dossier, accédez à un dossier à utiliser pour votre projet, puis choisissez Sélectionner.
En suivant les invites, saisissez les informations suivantes :
Prompt Action Sélectionner un langage Sélectionnez Java. Sélectionnez une version de Java Sélectionnez Java 8 ou ultérieur. Sélectionnez la version de Java sur laquelle vos fonctions s’exécutent dans Azure et une que vous avez vérifiée localement. Fournir un ID de groupe Entrez com.function. Fournir un ID d’artefact Entrez myDurableFunction. Fournir une version Entrez 1.0-SNAPSHOT. Fournir un nom de package Entrez com.function. Fournir un nom d’application Entrez myDurableFunction. Sélectionnez l'outil de construction pour le projet Java Sélectionnez Maven. Sélectionnez la façon dont vous souhaitez ouvrir votre projet Sélectionnez Ouvrir dans une nouvelle fenêtre.
Vous disposez maintenant d’un projet avec un exemple de fonction HTTP. Vous pouvez supprimer la fonction HTTP générée, car vous ajoutez la Durable Functions à l’étape suivante.
Ajouter des fonctions au projet
Dans la palette de commandes, entrez, puis sélectionnez Azure Functions : Créer une fonction.
Pour Modifier le filtre de modèle, sélectionnez Tous.
En suivant les invites, saisissez les informations suivantes :
Prompt Action Sélectionner un modèle pour votre fonction Sélectionnez DurableFunctionsOrchestration. Fournir un nom de package Entrez com.function. Fournir un nom de fonction Entrez DurableFunctionsOrchestrator. Dans la boîte de dialogue, choisissez Sélectionner un compte de stockage pour configurer un compte de stockage, puis suivez les invites.
Les trois fonctions de base d’une application Durable Functions doivent maintenant être générées.
Configurer pom.xml et host.json pour Durable Functions
Ajoutez la dépendance suivante à votre fichier pom.xml :
<dependency>
<groupId>com.microsoft</groupId>
<artifactId>durabletask-azure-functions</artifactId>
<version>1.0.0</version>
</dependency>
Ajoutez la extensions propriété à votre fichier host.json . Si le fichier possède déjà d’autres propriétés, fusionnez le extensions bloc dans le json existant :
{
"version": "2.0",
"extensions": {
"durableTask": {
"hubName": "JavaTestHub"
}
},
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[4.*, 5.0.0)"
}
}
Tester la fonction en local
Azure Functions Core Tools vous permet d’exécuter un projet Azure Functions sur votre ordinateur de développement local.
Si vous utilisez Visual Studio Code, ouvrez une nouvelle fenêtre de terminal et exécutez les commandes suivantes pour générer le projet :
mvn clean packageExécutez ensuite la fonction durable :
mvn azure-functions:runDans le panneau Terminal, copiez le point de terminaison de l’URL de votre fonction déclenchée par HTTP.
Utilisez votre outil de test HTTP pour envoyer une requête HTTP POST au point de terminaison d’URL.
La réponse doit être similaire à l’exemple suivant :
{ "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..." }La réponse est le résultat initial de la fonction HTTP. Elle vous permet de savoir que l’orchestration durable a démarré correctement. Elle n’affiche pas encore le résultat final de l’orchestration. La réponse contient plusieurs URL utiles. Pour le moment, interrogez l’état de l’orchestration.
Copiez la valeur de l’URL pour
statusQueryGetUri, collez-la dans la barre d’adresse de votre navigateur, puis exécutez la requête. Autrement, vous pouvez continuer à utiliser l’outil de test HTTP pour émettre la requête GET.La requête interroge l’instance d’orchestration pour obtenir l’état. Vous devez voir que l’instance s’est terminée, et qu’elle inclut les sorties ou les résultats de la fonction durable, comme dans cet exemple :
{ "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" }