Az első tartós függvény létrehozása Java-ban
A Durable Functions az Azure Functions bővítménye, amellyel állapotalapú függvényeket írhat kiszolgáló nélküli környezetben. The extension manages state, checkpoints, and restarts for you.
Ebben a rövid útmutatóban megtudhatja, hogyan hozhat létre és tesztelhet egy ""Helló világ!" alkalmazás" Durable Functions-alkalmazást Javában. A legalapvetőbb Durable Functions-alkalmazás a következő három függvényt tartalmazza:
- Orchestrator függvény – olyan munkafolyamatot ír le, amely más függvényeket vezényl.
- Tevékenységfüggvény – a vezénylő függvény hívja meg, elvégzi a munkát, és opcionálisan egy értéket ad vissza.
- Ügyfélfüggvény – egy reguláris Azure-függvény, amely elindít egy vezénylő függvényt. Ez a példa EGY HTTP által aktivált függvényt használ.
Ez a rövid útmutató bemutatja, hogyan hozhatja létre ezt a ""Helló világ!" alkalmazás" alkalmazást, amelyet különböző módokon végezhet el. Az előnyben részesített megközelítés kiválasztásához használja a fenti választógombot.
Előfeltételek
Az oktatóanyag elvégzéséhez a következőkre lesz szüksége:
A Java Developer Kit 8- vagy újabb verziója.
Apache Maven, 3.0-s vagy újabb verzió.
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 Azure Storage-fiók, amelyhez Azure-előfizetésre van szükség.
If you don't have an Azure subscription, create an Azure free account before you begin.
Szükséges függőségek és beépülő modulok hozzáadása a projekthez
Adja hozzá a következőket a következőhöz 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>
Szükséges JSON-fájlok hozzáadása
Adjon hozzá egy host.json
fájlt a projektkönyvtárhoz. Ennek a következőképpen 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)"
}
}
Megjegyzé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 példákra:
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();
}
}
Helyi projekt létrehozása a Maven paranccsal
- Futtassa a következő parancsot egy Durable Functions-alkalmazás alapfüggvényeivel rendelkező projekt létrehozásához:
mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype -DarchetypeVersion=1.51 -Dtrigger=durablefunctions
- Kövesse az utasításokat, és adja meg a következő információkat:
Adatkérés | Value |
---|---|
groupId | com.function |
artifactId | myDurableFunction |
Változat | 1.0-SNAPSHOT |
Csomag | com.function |
Y | A megerősítéshez nyomja le az Enter billentyűt |
Most létrehozott egy helyi projektet az alapszintű Durable Functions-alkalmazásokhoz szükséges három függménnyel.
Ellenőrizze, hogy rendelkezik-e com.microsoft:durabletask-azure-functions
függőségként a pom.xml
.
Háttértár-szolgá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. Úgy konfigurálhatja, hogy az Azure Storage-t társzolgáltatóként local.settings.json
használja, ha az Azure Storage-fiók kapcsolati sztring adja meg a következő AzureWebJobsStorage
értékként:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "<your storage account connection string>",
"FUNCTIONS_WORKER_RUNTIME": "java"
}
}
Helyi projekt létrehozása
A Visual Studio Code-ban nyomja le az F1 (vagy Ctrl/Cmd+Shift+P) billentyűkombinációt a parancskatalógus megnyitásához. A parancskatalógusban keresse meg és válassza ki a kívánt parancsot
Azure Functions: Create New Project...
.Válasszon egy üres mappahelyet a projekthez, és válassza a Kiválasztás lehetőséget.
Kövesse az utasításokat, és adja meg a következő információkat:
Adatkérés Value Nyelv kiválasztása Válassza a Java
elemet.Java-verzió kiválasztása Válassza ki Java 8
vagy újabb, a Java-verziót, amelyen a függvények futnak az Azure-ban. Válassza ki a helyileg ellenőrzött Java-verziót.Csoportazonosító megadása com.function
.Összetevő-azonosító megadása myDurableFunction
.Verzió megadása 1.0-SNAPSHOT
.Adja meg a csomag nevét com.function
.Alkalmazásnév megadása myDurableFunction
.A Java-projekt buildelési eszközének kiválasztása Válassza a Maven
elemet.Válassza ki, hogyan szeretné megnyitni a projektet Válassza a Open in new window
elemet.
Most már rendelkezik egy HTTP-példával rendelkező projekttel. Ha szeretné, eltávolíthatja ezt a függvényt, mert a következő lépésben hozzáadjuk egy Durable Functions-alkalmazás alapfüggvényét.
Függvények hozzáadása a projekthez
A parancskatalógusban keresse meg és válassza ki a kívánt parancsot
Azure Functions: Create Function...
.Válassza ki
Change template filter
a kívánt elemetAll
.Kövesse az utasításokat, és adja meg a következő információkat:
Adatkérés Value Sablon kiválasztása a függvényhez DurableFunctionsOrchestration Adja meg a csomag nevét com.function
Függvénynév megadása DurableFunctionsOrchestrator
Válassza
Select storage account
ki az előugró ablakban a tárfiók adatainak beállítását, és kövesse az utasításokat.
Most létre kell hoznia a Durable Functions-alkalmazások három alapfüggvényét.
A pom.xml és a host.json konfigurálása
Adja hozzá a következő függőséget a következőhöz pom.xml
:
<dependency>
<groupId>com.microsoft</groupId>
<artifactId>durabletask-azure-functions</artifactId>
<version>1.0.0</version>
</dependency>
Adja hozzá a extensions
tulajdonságot a következőhöz host.json
:
"extensions": { "durableTask": { "hubName": "JavaTestHub" }}
A függvény helyi tesztelése
Az Azure Functions Core Tools lehetővé teszi Azure Functions-projektek helyi fejlesztői számítógépen való futtatását.
Megjegyzés:
A Durable Functions for Java használatához az Azure Functions Core Tools 4.0.4915-ös vagy újabb verziójára van szükség. A terminál parancsának 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 Terminal (Terminál) panelen másolja a vágólapra a HTTP által indított függvény URL-végpontját.
Egy olyan eszközzel, mint a Postman vagy a cURL, küldjön egy HTTP POST-kérést az URL-végpontnak. A következőhöz hasonló választ kell kapnia:
{ "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==" }
A válasz a HTTP-függvény kezdeti eredménye, amelyből megtudhatja, hogy a tartós vezénylés sikeresen elindult. Ez még nem a vezénylés végeredménye. A válasz tartalmaz néhány hasznos URL-címet. Egyelőre kérdezzük le a vezénylés állapotát.
Másolja ki a böngésző címsorában lévő URL-címet
statusQueryGetUri
, és illessze be, és hajtsa végre a kérést. Másik lehetőségként továbbra is használhatja a Postmant vagy a cURL-t a GET kérés kiadásához.A kérés lekérdezi az állapot vezénylési példányát. Egy végleges választ kell kapnia, amely megmutatja, hogy a példány befejeződött, és tartalmazza a tartós függvény kimeneteit vagy eredményeit. A következőképpen néz ki:
{ "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" }