Java'da ilk dayanıklı işlevinizi oluşturma
Dayanıklı İşlevler, sunucusuz bir ortamda durum bilgisi olan işlevler yazmanızı sağlayan bir Azure İşlevleri uzantısıdır. Uzantı sizin için durumu, denetim noktalarını ve yeniden başlatmaları yönetir.
Bu hızlı başlangıçta Java'da bir "Merhaba Dünya" Dayanıklı İşlevler uygulaması oluşturmayı ve test etmeyi öğreneceksiniz. En temel Dayanıklı İşlevler uygulaması aşağıdaki üç işlevi içerir:
- Orchestrator işlevi - diğer işlevleri düzenleyen bir iş akışını açıklar.
- Etkinlik işlevi - orchestrator işlevi tarafından çağrılır, iş gerçekleştirir ve isteğe bağlı olarak bir değer döndürür.
- İstemci işlevi - düzenleyici işlevi başlatan normal bir Azure İşlevi. Bu örnekte HTTP ile tetiklenen bir işlev kullanılır.
Bu hızlı başlangıçta, farklı şekillerde yapabileceğiniz bu "Merhaba Dünya" uygulamasını nasıl oluşturacağınız gösterilir. Tercih ettiğiniz yaklaşımı seçmek için yukarıdaki seçiciyi kullanın.
Ön koşullar
Bu öğreticiyi tamamlamak için aşağıdakiler gerekir:
Java Geliştirici Seti, sürüm 8 veya üzeri.
Apache Maven, sürüm 3.0 veya üzeri.
Azure İşlevleri Core Tools'un en son sürümü.
- Azure İşlevleri 4.x için Core Tools v4.0.4915 veya üzeri gereklidir.
Azure aboneliğinizin olmasını gerektiren bir Azure Depolama hesabı.
Azure aboneliğiniz yoksa başlamadan önce birücretsiz Azure hesabı oluşturun.
Projenize gerekli bağımlılıkları ve eklentileri ekleme
aşağıdakini ekleyin 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>
Gerekli JSON dosyalarını ekleme
Proje dizininize bir host.json
dosya ekleyin. Şunun gibi görünmelidir:
{
"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)"
}
}
Dekont
Java için Dayanıklı İşlevler için şu anda yalnızca Azure İşlevleri v4 uzantı paketinin gerekli desteğe sahip olduğunu unutmayın. Java için Dayanıklı İşlevler v3 ve erken uzantı paketlerinde desteklenmez. Uzantı paketleri hakkında daha fazla bilgi için uzantı paketleri belgelerine bakın.
Dayanıklı İşlevler çalışma zamanı durumunu depolamak için bir depolama sağlayıcısı gerekir. Depolama sağlayıcısını yapılandırmak için proje dizininize bir local.settings.json
dosya ekleyin. Sağlayıcı olarak Azure Depolama kullanmak için değerini AzureWebJobsStorage
Azure Depolama hesabınızın bağlantı dizesi olarak ayarlayın:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "<your storage account connection string>",
"FUNCTIONS_WORKER_RUNTIME": "java"
}
}
İşlevlerinizi oluşturma
Aşağıdaki örnek kod, her birinin basit bir örneğini gösterir:
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();
}
}
Maven komutuyla yerel proje oluşturma
- bir Dayanıklı İşlevler uygulamasının temel işlevleriyle bir proje oluşturmak için aşağıdaki komutu çalıştırın:
mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype -DarchetypeVersion=1.51 -Dtrigger=durablefunctions
- istemleri izleyin ve aşağıdaki bilgileri sağlayın:
İstem | Değer |
---|---|
Groupıd | com.function |
Artifactıd | myDurableFunction |
version | 1.0-SNAPSHOT |
Paket | com.function |
Y | Onaylamak için Enter tuşuna basın |
Artık temel bir Dayanıklı İşlevler uygulaması için gereken üç işlevle oluşturulmuş yerel bir projeniz var.
Lütfen içinde pom.xml
bir bağımlılık olduğundan emin olmak com.microsoft:durabletask-azure-functions
için denetleyin.
Arka uç depolama sağlayıcısını yapılandırma
Dayanıklı İşlevler çalışma zamanı durumunu depolamak için bir depolama sağlayıcısı gerekir. Azure Depolama hesabınızın bağlantı dizesi değerini olarak sağlayarak Azure Depolama'ı local.settings.json
içinde depolama sağlayıcısı olarak kullanacak şekilde AzureWebJobsStorage
yapılandırabilirsiniz:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "<your storage account connection string>",
"FUNCTIONS_WORKER_RUNTIME": "java"
}
}
Yerel projenizi oluşturma
Visual Studio Code'da komut paletini açmak için F1 (veya Ctrl/Cmd+Shift+P) tuşlarına basın. Komut paletinde araması yapın ve öğesini seçin
Azure Functions: Create New Project...
.Projeniz için boş bir klasör konumu seçin ve Seç'i seçin.
istemleri izleyin ve aşağıdaki bilgileri sağlayın:
İstem Değer Dil seçin Java
öğesini seçin.Java sürümünü seçme İşlevlerinizin Azure'da çalıştığı Java sürümü olan veya daha yeni bir sürümü seçin Java 8
. Yerel olarak doğruladığınız bir Java sürümü seçin.Grup kimliği belirtin com.function
.Yapıt kimliği sağlama myDurableFunction
.Sürüm sağlama 1.0-SNAPSHOT
.Paket adı belirtin com.function
.Uygulama adı belirtin myDurableFunction
.Java projesi için derleme aracını seçin Maven
öğesini seçin.Projenizi nasıl açmak istediğinizi seçin Open in new window
öğesini seçin.
Artık örnek http işlevine sahip bir projeniz var. bir sonraki adımda bir Dayanıklı İşlevler uygulamasının temel işlevlerini ekleyacağımız için isterseniz bu işlevi kaldırabilirsiniz.
Projeye işlev ekleme
Komut paletinde araması yapın ve öğesini seçin
Azure Functions: Create Function...
.öğesini seçin
Change template filter
All
.istemleri izleyin ve aşağıdaki bilgileri sağlayın:
İstem Değer İşleviniz için şablon seçme DurableFunctionsOrchestration Paket adı belirtin com.function
İşlev adı belirtin DurableFunctionsOrchestrator
Depolama hesabı bilgilerini ayarlamak isteyip istemediğinizi soran açılır pencerede öğesini seçin
Select storage account
ve istemleri izleyin.
Artık bir Dayanıklı İşlevler uygulaması için üç temel işlevin oluşturulması gerekir.
pom.xml ve host.json'u yapılandırma
aşağıdaki bağımlılığınıza pom.xml
ekleyin:
<dependency>
<groupId>com.microsoft</groupId>
<artifactId>durabletask-azure-functions</artifactId>
<version>1.0.0</version>
</dependency>
özelliğine extensions
host.json
ekleyin:
"extensions": { "durableTask": { "hubName": "JavaTestHub" }}
İşlevi yerel olarak test etme
Azure İşlevleri Temel Araçları, Azure İşlevleri projenizi yerel geliştirme bilgisayarınızda çalıştırmanıza olanak sağlar.
Dekont
Java için Dayanıklı İşlevler için Azure İşlevleri Core Tools v4.0.4915 veya üzeri gerekir. Terminalden komutunu çalıştırarak hangi sürümün func --version
yüklü olduğunu görebilirsiniz.
Visual Studio Code kullanıyorsanız yeni bir terminal penceresi açın ve projeyi oluşturmak için aşağıdaki komutları çalıştırın:
mvn clean package
Ardından dayanıklı işlevi çalıştırın:
mvn azure-functions:run
Terminal panelinde, HTTP ile tetiklenen işlevinizin URL uç noktasını kopyalayın.
Postman veya cURL gibi bir araç kullanarak URL uç noktasına bir HTTP POST isteği gönderin. Aşağıdakine benzer bir yanıt almanız gerekir:
{ "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==" }
Yanıt, HTTP işlevinin dayanıklı düzenlemenin başarıyla başladığını bildiren ilk sonucudur. Henüz düzenlemenin sonucu değildir. Yanıt birkaç yararlı URL içerir. Şimdilik düzenlemenin durumunu sorgulayalım.
url
statusQueryGetUri
değerini kopyalayıp tarayıcının adres çubuğuna yapıştırın ve isteği yürütür. Alternatif olarak, GET isteğini vermek için Postman veya cURL kullanmaya devam edebilirsiniz.İstek, durum için düzenleme örneğini sorgular. Örneğin tamamlandığını gösteren ve dayanıklı işlevin çıkışlarını veya sonuçlarını içeren nihai bir yanıt almanız gerekir. Şuna benzer:
{ "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" }