Share via


Uw eerste duurzame functie maken in Java

Durable Functions is een extensie van Azure Functions waarmee u stateful functies kunt schrijven in een serverloze omgeving. Met de extensie worden status, controlepunten en het opnieuw opstarten voor u beheerd.

In deze quickstart leert u hoe u een Durable Functions-app voor 'Hallo wereld' maakt en test in Java. De meest eenvoudige Durable Functions-app bevat de volgende drie functies:

  • Orchestrator-functie: beschrijft een werkstroom die andere functies organiseert.
  • Activiteitfunctie: wordt aangeroepen door de Orchestrator-functie, voert het werk uit en retourneert optioneel een waarde.
  • Clientfunctie: een reguliere Azure-functie waarmee een Orchestrator-functie wordt gestart. In dit voorbeeld wordt een door HTTP geactiveerde functie gebruikt.

In deze quickstart ziet u hoe u deze 'Hallo wereld'-app maakt, die u op verschillende manieren kunt doen. Gebruik de bovenstaande selector om uw voorkeursbenadering te kiezen.

Vereisten

U hebt het volgende nodig om deze zelfstudie te voltooien:

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 het volgende toe aan uw pom.xml:

<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>

Vereiste JSON-bestanden toevoegen

Voeg een host.json bestand toe aan de projectmap. Dit moet er ongeveer als volgt uitzien:

{
  "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

In de onderstaande voorbeeldcode ziet u een eenvoudig voorbeeld van elk voorbeeld:

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 gets 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 maven-opdracht

  1. Voer de volgende opdracht uit om een project te genereren met de basisfuncties van een Durable Functions-app:
mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype -DarchetypeVersion=1.51 -Dtrigger=durablefunctions
  1. Volg de aanwijzingen en geef de volgende informatie op:
Prompt Waarde
groupId com.function
artifactId myDurableFunction
version 1.0-SNAPSHOT
package com.function
Y Druk op Enter om te bevestigen

U hebt nu een lokaal project gegenereerd met de drie functies die nodig zijn voor een eenvoudige Durable Functions-app.

Controleer of u een afhankelijkheid hebt com.microsoft:durabletask-azure-functions in uw pom.xml.

Back-endopslagprovider configureren

Durable Functions heeft een opslagprovider nodig om runtimestatus op te slaan. U kunt azure Storage als opslagprovider local.settings.json configureren door de verbindingsreeks van uw Azure Storage-account op te geven als waarde voorAzureWebJobsStorage:

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "<your storage account connection string>",
    "FUNCTIONS_WORKER_RUNTIME": "java"
  }
}

Uw lokale project maken

  1. Druk in Visual Studio Code op F1 (of Ctrl/Cmd+Shift+P) om het opdrachtenpalet te openen. In het opdrachtenpalet zoekt en selecteert u Azure Functions: Create New Project....

    Screenshot of create new functions project.

  2. Kies een lege map voor uw project en kies Selecteren.

  3. Volg de aanwijzingen en geef de volgende informatie op:

    Prompt Waarde
    Een taal selecteren Kies Java.
    Een versie van Java selecteren Kies Java 8 of nieuwer, de Java-versie waarop uw functies worden uitgevoerd in Azure. Kies een Java-versie die u lokaal hebt geverifieerd.
    Een groeps-id opgeven com.function.
    Geef een artefact-id op myDurableFunction.
    Geef een versie op 1.0-SNAPSHOT.
    Geef een pakketnaam op com.function.
    Geef een app-naam op myDurableFunction.
    Het buildhulpprogramma voor een Java-project selecteren Kies Maven.
    Selecteer hoe u uw project wilt openen Kies Open in new window.

U hebt nu een project met een voorbeeld van een HTTP-functie. U kunt deze functie desgewenst verwijderen omdat we in de volgende stap de basisfuncties van een Durable Functions-app gaan toevoegen.

Functies toevoegen aan het project

  1. In het opdrachtenpalet zoekt en selecteert u Azure Functions: Create Function....

  2. Selecteer Change template filter deze optie All.

  3. Volg de aanwijzingen en geef de volgende informatie op:

    Prompt Waarde
    Selecteer een sjabloon voor uw functie DurableFunctionsOrchestration
    Geef een pakketnaam op com.function
    Geef een functienaam op DurableFunctionsOrchestrator
  4. Kies Select storage account in het pop-upvenster waarin u wordt gevraagd om opslagaccountgegevens in te stellen en volg de aanwijzingen.

U hebt nu de drie basisfuncties voor een Durable Functions-app gegenereerd.

Pom.xml en host.json configureren

Voeg de volgende afhankelijkheid toe aan uw pom.xml:

<dependency>
  <groupId>com.microsoft</groupId>
  <artifactId>durabletask-azure-functions</artifactId>
  <version>1.0.0</version>
</dependency>

Voeg de extensions eigenschap toe aan het host.jsonvolgende:

"extensions": { "durableTask": { "hubName": "JavaTestHub" }}

De functie lokaal testen

Met Azure Functions Core-hulpprogramma's kunt u een Azure Functions-project uitvoeren op uw lokale ontwikkelcomputer.

Notitie

Durable Functions voor Java vereist Azure Functions Core Tools v4.0.4915 of hoger. U kunt zien welke versie is geïnstalleerd door de func --version opdracht uit te voeren vanuit de terminal.

  1. 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
    
  2. Kopieer het URL-eindpunt van de door HTTP getriggerde functie in het deelvenster Terminal.

    Screenshot of Azure local output.

  3. Verzend met behulp van een hulpprogramma zoals Postman of cURL een HTTP POST-aanvraag naar het URL-eindpunt. Als het goed is, krijgt u een antwoord dat er ongeveer als volgt uitziet:

    {
        "id": "d1b33a60-333f-4d6e-9ade-17a7020562a9",
        "purgeHistoryDeleteUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/d1b33a60-333f-4d6e-9ade-17a7020562a9?code=ACCupah_QfGKoFXydcOHH9ffcnYPqjkddSawzRjpp1PQAzFueJ2tDw==",
        "sendEventPostUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/d1b33a60-333f-4d6e-9ade-17a7020562a9/raiseEvent/{eventName}?code=ACCupah_QfGKoFXydcOHH9ffcnYPqjkddSawzRjpp1PQAzFueJ2tDw==",
        "statusQueryGetUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/d1b33a60-333f-4d6e-9ade-17a7020562a9?code=ACCupah_QfGKoFXydcOHH9ffcnYPqjkddSawzRjpp1PQAzFueJ2tDw==",
        "terminatePostUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/d1b33a60-333f-4d6e-9ade-17a7020562a9/terminate?reason={text}&code=ACCupah_QfGKoFXydcOHH9ffcnYPqjkddSawzRjpp1PQAzFueJ2tDw=="
    }
    

    De reactie is het eerste resultaat van de HTTP-functie dat u laat weten dat de duurzame indeling is gestart. Dit is nog niet het eindresultaat van de orchestrator. De reactie bevat enkele nuttige URL's. Maar eerst gaan we de status van de orchestrator opvragen.

  4. Kopieer de URL-waarde voor statusQueryGetUri, plak deze in de adresbalk van de browser en voer de aanvraag uit. U kunt ook Postman of cURL blijven gebruiken om de GET-aanvraag uit te geven.

    De aanvraag voert een query uit op het orchestrator-exemplaar voor de status. U moet een eindige reactie krijgen, die laat zien dat het exemplaar is voltooid en die de uitvoer of resultaten van de Durable Function bevat. Deze ziet er als volgt uit:

    {
        "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"
    }