Rövid útmutató: Java Durable Functions-alkalmazás létrehozása
Az Azure Functions egyik funkciója, a Durable Functions használatával állapotalapú függvényeket írhat kiszolgáló nélküli környezetben. A Durable Functions kezeli az alkalmazás állapotát, ellenőrzőpontjait és újraindításait.
Ebben a rövid útmutatóban létrehoz és tesztel egy "hello world" Durable Functions-alkalmazást a Javában.
A legalapvetőbb Durable Functions-alkalmazás három funkcióval rendelkezik:
- Vezénylő függvény: Más függvényeket vezénylő munkafolyamat.
- Tevékenységfüggvény: A vezénylő függvény által hívott függvény, amely elvégzi a munkát, és opcionálisan egy értéket ad vissza.
- Ügyfélfüggvény: Az Azure rendszeres függvénye, amely elindít egy vezénylőfüggvényt. Ez a példa EGY HTTP-aktivált függvényt használ.
Ez a rövid útmutató a "hello world" alkalmazás létrehozásának különböző módjait ismerteti. Az előnyben részesített megközelítés beállításához használja az oldal tetején található választógombot.
Előfeltételek
A rövid útmutató elvégzéséhez a következőkre lesz szüksége:
A Java Developer Kit 8- vagy újabb verziója telepítve van.
Az Apache Maven 3.0-s vagy újabb verziója telepítve van.
Az Azure Functions Core Tools legújabb verziója.
Az Azure Functions 4.x esetében a Core Tools 4.0.4915-ös vagy újabb verziójára van szükség.
EGY HTTP-teszteszköz, amely biztonságossá teszi az adatokat. További információ: HTTP-teszteszközök.
Azure-előfizetés. A Durable Functions használatához Azure Storage-fiókkal kell rendelkeznie.
Ha nem rendelkezik Azure-előfizetéssel, első lépésként hozzon létre egy ingyenes Azure-fiókot.
Szükséges függőségek és beépülő modulok hozzáadása a projekthez
Adja hozzá a következő kódot a pom.xml fájlhoz:
<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>
Adja hozzá a szükséges JSON-fájlokat
Vegyen fel egy host.json fájlt a projektkönyvtárba. A következő példához hasonlóan kell kinéznie:
{
"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)"
}
}
Feljegyzés
Fontos megjegyezni, hogy jelenleg csak az Azure Functions v4-bővítménycsomag rendelkezik a Java-hoz készült Durable Functions szükséges támogatásával. A Durable Functions for Java nem támogatott a v3-as és a korai bővítménycsomagokban. A bővítménycsomagokkal kapcsolatos további információkért tekintse meg a bővítménykötegek dokumentációját.
A Durable Functionsnek szüksége van egy tárolószolgáltatóra a futtatókörnyezet állapotának tárolásához. Adjon hozzá egy local.settings.json fájlt a projektkönyvtárhoz a társzolgáltató konfigurálásához. Az Azure Storage szolgáltatóként való használatához állítsa be az Azure Storage-fiók kapcsolati sztring értékétAzureWebJobsStorage
:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "<your storage account connection string>",
"FUNCTIONS_WORKER_RUNTIME": "java"
}
}
A függvények létrehozása
Az alábbi mintakód egy egyszerű példát mutat be az egyes függvénytípusokra:
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();
}
}
Helyi projekt létrehozása a Maven paranccsal
Futtassa a következő parancsot egy Olyan projekt létrehozásához, amely egy Durable Functions-alkalmazás alapfüggvényét tartalmazza:
mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype -DarchetypeVersion=1.51 -Dtrigger=durablefunctions
A parancssorban adja meg a következő információkat:
Felszólítás | Művelet |
---|---|
groupId | Írja be a com.function függvényt. |
artifactId | Adja meg a myDurableFunction parancsot. |
verzió | Válassza az 1.0-PILLANATKÉP lehetőséget. |
csomag | Írja be a com.function függvényt. |
Y | Írja be az Y értéket, és a megerősítéshez válassza az Enter billentyűt. |
Most már van egy helyi projektje, amely egy alapszintű Durable Functions-alkalmazásban található három függvényt tartalmazza.
Ellenőrizze, hogy függőségként com.microsoft:durabletask-azure-functions
van-e beállítva a pom.xml fájlban.
A háttértárszolgáltató konfigurálása
A Durable Functionsnek szüksége van egy tárolószolgáltatóra a futtatókörnyezet állapotának tárolásához. Az Azure Storage-t a local.settings.json társzolgáltatójaként állíthatja be. Használja az Azure Storage-fiók kapcsolati sztring az alábbi példához hasonló értékkéntAzureWebJobsStorage
:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "<your storage account connection string>",
"FUNCTIONS_WORKER_RUNTIME": "java"
}
}
Helyi projekt létrehozása
A Visual Studio Code-ban válassza az F1 (vagy a Ctrl/Cmd+Shift+P) billentyűkombinációt a parancspaletta megnyitásához. A parancssorba írja
>
be, majd válassza az Azure Functions: Create New Project (Új projekt létrehozása) lehetőséget.Válassza a Tallózás lehetőséget. A Mappa kiválasztása párbeszédpanelen lépjen a projekthez használni kívánt mappára, majd válassza a Kiválasztás lehetőséget.
A parancssorban adja meg a következő információkat:
Felszólítás Művelet Nyelv kiválasztása Válassza a Java lehetőséget. Java-verzió kiválasztása Válassza a Java 8 vagy újabb verzióját. Válassza ki azt a Java-verziót, amelyen a függvények futnak az Azure-ban, és amelyiket helyileg ellenőrizte. Csoportazonosító megadása Írja be a com.function függvényt. Összetevő-azonosító megadása Adja meg a myDurableFunction parancsot. Verzió megadása Adja meg az 1.0-SNAPSHOT értéket. Adja meg a csomag nevét Írja be a com.function függvényt. Alkalmazásnév megadása Adja meg a myDurableFunction parancsot. A Java-projekt buildelési eszközének kiválasztása Válassza a Maven lehetőséget. Válassza ki, hogyan szeretné megnyitni a projektet Válassza a Megnyitás új ablakban lehetőséget.
Most már rendelkezik egy http-példafüggvénnyel rendelkező projektel. Ha szeretné, eltávolíthatja ezt a függvényt, mert a következő lépésben hozzáadja egy Durable Functions-alkalmazás alapfüggvényét.
Függvények hozzáadása a projekthez
A parancskatalógusban adja meg, majd válassza az Azure Functions: Függvény létrehozása lehetőséget.
A sablonszűrő módosításához válassza az Összes lehetőséget.
A parancssorban adja meg a következő információkat:
Felszólítás Művelet Sablon kiválasztása a függvényhez Válassza a DurableFunctionsOrchestration lehetőséget. Adja meg a csomag nevét Írja be a com.function függvényt. Függvénynév megadása Adja meg a DurableFunctionsOrchestrator értéket. A párbeszédpanelen válassza a Tárfiók kiválasztása lehetőséget a tárfiók beállításához, majd kövesse az utasításokat.
Most létre kell hoznia a Durable Functions-alkalmazásokhoz létrehozott három alapfüggvényt.
Pom.xml és host.json konfigurálása
Adja hozzá a következő függőséget a pom.xml fájlhoz:
<dependency>
<groupId>com.microsoft</groupId>
<artifactId>durabletask-azure-functions</artifactId>
<version>1.0.0</version>
</dependency>
Adja hozzá a extensions
tulajdonságot a host.json fájlhoz:
"extensions": { "durableTask": { "hubName": "JavaTestHub" }}
A függvény helyi tesztelése
Az Azure Functions Core Tools lehetővé teszi egy Azure Functions-projekt helyi fejlesztési számítógépen való futtatását.
Feljegyzés
A Durable Functions for Java használatához az Azure Functions Core Tools 4.0.4915-ös vagy újabb verziója szükséges. A parancs terminálban való futtatásával func --version
láthatja, hogy melyik verzió van telepítve.
Ha Visual Studio Code-ot használ, nyisson meg egy új terminálablakot, és futtassa a következő parancsokat a projekt létrehozásához:
mvn clean package
Ezután futtassa a tartós függvényt:
mvn azure-functions:run
A terminálpanelen másolja ki a HTTP-aktivált függvény URL-végpontját.
HTTP-teszteszköz használatával HTTP POST-kérést küldhet az URL-végpontnak.
A válasznak a következő példához hasonlóan kell kinéznie:
{ "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..." }
A válasz a HTTP-függvény kezdeti eredménye. Tudatja Önvel, hogy a tartós vezénylés sikeresen elindult. Még nem jeleníti meg a vezénylés végeredményét. A válasz tartalmaz néhány hasznos URL-címet. Egyelőre lekérdezheti a vezénylés állapotát.
Másolja ki a cél URL-címét
statusQueryGetUri
, illessze be a böngésző címsorában, és hajtsa végre a kérést. Másik lehetőségként továbbra is használhatja a HTTP-teszteszközt a GET kérés kiadásához.A kérés lekérdezi a vezénylési példányt az állapothoz. Látnia kell, hogy a példány befejeződött, és tartalmazza a tartós függvény kimeneteit vagy eredményeit, például ebben a példában:
{ "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" }