Rychlý start: Vytvoření aplikace Java Durable Functions
Funkce Durable Functions, která je funkcí Azure Functions, slouží k zápisu stavových funkcí v bezserverovém prostředí. Durable Functions spravuje stav, kontrolní body a restartuje ve vaší aplikaci.
V tomto rychlém startu vytvoříte a otestujete aplikaci Durable Functions hello world v Javě.
Nejzásadnější aplikace Durable Functions má tři funkce:
- Funkce orchestratoru: Pracovní postup, který orchestruje další funkce.
- Funkce aktivity: Funkce, která je volána funkcí orchestrátoru, provádí práci a volitelně vrací hodnotu.
- Klientská funkce: Běžná funkce v Azure, která spouští funkci orchestrátoru. Tento příklad používá funkci aktivovanou protokolem HTTP.
Tento rychlý start popisuje různé způsoby vytvoření této aplikace "hello world". Pomocí selektoru v horní části stránky nastavte upřednostňovaný přístup.
Požadavky
K dokončení tohoto rychlého startu je potřeba:
Nainstalovaná sada Java Developer Kit verze 8 nebo novější.
Nainstalovaný Apache Maven verze 3.0 nebo novější
Nejnovější verze nástrojů Azure Functions Core Tools.
Pro Azure Functions 4.x se vyžaduje Core Tools verze 4.0.4915 nebo novější.
Testovací nástroj HTTP, který udržuje vaše data v bezpečí. Další informace najdete v tématu Nástroje pro testování HTTP.
Předplatné Azure. Pokud chcete používat Durable Functions, musíte mít účet Azure Storage.
Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet Azure před tím, než začnete.
Přidání požadovaných závislostí a modulů plug-in do projektu
Do souboru pom.xml přidejte následující kód:
<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>
Přidání požadovaných souborů JSON
Přidejte soubor host.json do adresáře projektu. Měl by vypadat podobně jako v následujícím příkladu:
{
"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)"
}
}
Poznámka:
Je důležité si uvědomit, že pro Durable Functions pro Javu má aktuálně potřebnou podporu pouze sada rozšíření Azure Functions v4. Durable Functions pro Javu není podporován v 3 a raných sadách rozšíření. Další informace o sadách rozšíření najdete v dokumentaci k sadám rozšíření.
Durable Functions potřebuje zprostředkovatele úložiště k uložení stavu modulu runtime. Přidejte do adresáře projektu soubor local.settings.json a nakonfigurujte zprostředkovatele úložiště. Pokud chcete jako zprostředkovatele použít Azure Storage, nastavte hodnotu AzureWebJobsStorage
na připojovací řetězec účtu Azure Storage:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "<your storage account connection string>",
"FUNCTIONS_WORKER_RUNTIME": "java"
}
}
Vytvoření funkcí
Následující ukázkový kód ukazuje základní příklad každého typu funkce:
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();
}
}
Vytvoření místního projektu pomocí příkazu Maven
Spuštěním následujícího příkazu vygenerujte projekt, který obsahuje základní funkce aplikace Durable Functions:
mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype -DarchetypeVersion=1.62 -Dtrigger=durablefunctions
Na příkazovém řádku zadejte následující informace:
Instrukce | Akce |
---|---|
groupId | Zadejte com.function. |
artifactId | Zadejte myDurableFunction. |
version | Vyberte 1.0-SNAPSHOT. |
balíček | Zadejte com.function. |
Y | Zadejte Y a potvrďte výběr klávesy Enter. |
Teď máte místní projekt, který má tři funkce, které jsou v základní aplikaci Durable Functions.
Zkontrolujte, jestli com.microsoft:durabletask-azure-functions
je v souboru pom.xml nastavená jako závislost.
Konfigurace poskytovatele back-endového úložiště
Durable Functions potřebuje zprostředkovatele úložiště k uložení stavu modulu runtime. Azure Storage můžete nastavit jako poskytovatele úložiště v local.settings.json. Jako hodnotu jako v AzureWebJobsStorage
tomto příkladu použijte připojovací řetězec vašeho účtu úložiště Azure:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "<your storage account connection string>",
"FUNCTIONS_WORKER_RUNTIME": "java"
}
}
Vytvoření místního projektu
V editoru Visual Studio Code vyberte F1 (nebo stisknutím kombinace kláves Ctrl/Cmd+Shift+P) otevřete paletu příkazů. Na příkazovém řádku (
>
) zadejte a pak vyberte Azure Functions: Vytvořit nový projekt.Vyberte Procházet. V dialogovém okně Vybrat složku přejděte do složky, která se má použít pro váš projekt, a pak zvolte Vybrat.
Na příkazovém řádku zadejte následující informace:
Instrukce Akce Výběr jazyka Vyberte Javu. Výběr verze Javy Vyberte Javu 8 nebo novější. Vyberte verzi Javy, na které vaše funkce běží v Azure, a verzi, kterou jste ověřili místně. Zadejte ID skupiny. Zadejte com.function. Zadejte ID artefaktu. Zadejte myDurableFunction. Zadejte verzi. Zadejte 1.0-SNAPSHOT. Zadejte název balíčku. Zadejte com.function. Zadejte název aplikace. Zadejte myDurableFunction. Výběr nástroje pro sestavení pro projekt Java Vyberte Maven. Vyberte, jak chcete projekt otevřít. Vyberte Otevřít v novém okně.
Teď máte projekt, který má ukázkovou funkci HTTP. Tuto funkci můžete odebrat, pokud chcete, protože v dalším kroku přidáte základní funkce aplikace Durable Functions.
Přidání funkcí do projektu
Na paletě příkazů zadejte a pak vyberte Azure Functions: Create Function.
V části Změnit filtr šablony vyberte Vše.
Na příkazovém řádku zadejte následující informace:
Instrukce Akce Výběr šablony pro funkci Vyberte DurableFunctionsOrchestration. Zadejte název balíčku. Zadejte com.function. Zadejte název funkce. Zadejte DurableFunctionsOrchestrator. V dialogovém okně zvolte Vybrat účet úložiště, aby se nastavil účet úložiště, a pak postupujte podle pokynů.
Teď byste měli mít vygenerované tři základní funkce pro aplikaci Durable Functions.
Konfigurace pom.xml a host.json
Do souboru pom.xml přidejte následující závislost:
<dependency>
<groupId>com.microsoft</groupId>
<artifactId>durabletask-azure-functions</artifactId>
<version>1.0.0</version>
</dependency>
extensions
Do souboru host.json přidejte vlastnost:
"extensions": { "durableTask": { "hubName": "JavaTestHub" }}
Místní testování funkce
Nástroje Azure Functions Core Tools umožňují spouštět projekt Azure Functions na místním vývojovém počítači.
Poznámka:
Durable Functions pro Javu vyžaduje nástroje Azure Functions Core Tools verze 4.0.4915 nebo novější. Verzi nainstalovanou můžete zobrazit spuštěním func --version
příkazu v terminálu.
Pokud používáte Visual Studio Code, otevřete nové okno terminálu a spuštěním následujících příkazů sestavte projekt:
mvn clean package
Pak spusťte odolnou funkci:
mvn azure-functions:run
Na panelu terminálu zkopírujte koncový bod adresy URL funkce aktivované protokolem HTTP.
Pomocí testovacího nástroje HTTP odešlete požadavek HTTP POST do koncového bodu adresy URL.
Odpověď by měla vypadat podobně jako v následujícím příkladu:
{ "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..." }
Odpověď je počáteční výsledek funkce HTTP. Dá vám vědět, že trvalá orchestrace byla úspěšně spuštěna. Zatím nezobrazuje konečný výsledek orchestrace. Odpověď obsahuje několik užitečných adres URL. Prozatím zadejte dotaz na stav orchestrace.
Zkopírujte hodnotu adresy URL ,
statusQueryGetUri
vložte ji do adresního řádku prohlížeče a spusťte požadavek. Alternativně můžete k vydání požadavku GET dál používat testovací nástroj HTTP.Požadavek se dotazuje instance orchestrace na stav. Měli byste vidět, že instance byla dokončena a že obsahuje výstupy nebo výsledky odolné funkce, například v tomto příkladu:
{ "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" }