Mulai Cepat: Membuat aplikasi Java Durable Functions
Gunakan Durable Functions, fitur Azure Functions, untuk menulis fungsi stateful di lingkungan tanpa server. Durable Functions mengelola status, titik pemeriksaan, dan memulai ulang di aplikasi Anda.
Dalam mulai cepat ini, Anda membuat dan menguji aplikasi Durable Functions "hello world" di Java.
Aplikasi Durable Functions paling dasar memiliki tiga fungsi:
- Fungsi orkestrator: Alur kerja yang mengatur fungsi lain.
- Fungsi aktivitas: Fungsi yang dipanggil oleh fungsi orkestrator, melakukan pekerjaan, dan secara opsional mengembalikan nilai.
- Fungsi klien: Fungsi reguler di Azure yang memulai fungsi orkestrator. Contoh ini menggunakan fungsi yang dipicu HTTP.
Mulai cepat ini menjelaskan berbagai cara untuk membuat aplikasi "halo dunia" ini. Gunakan pemilih di bagian atas halaman untuk mengatur pendekatan pilihan Anda.
Prasyarat
Untuk menyelesaikan mulai cepat ini, Anda memerlukan:
Java Developer Kit versi 8 atau yang lebih baru terinstal.
Apache Maven versi 3.0 atau yang lebih baru terinstal.
Versi terbaru Azure Functions Core Tools.
Untuk Azure Functions 4.x, Core Tools versi 4.0.4915 atau yang lebih baru diperlukan.
Alat uji HTTP yang menjaga keamanan data Anda. Untuk informasi selengkapnya, lihat Alat pengujian HTTP.
Langganan Azure. Untuk menggunakan Durable Functions, Anda harus memiliki akun Azure Storage.
Jika Anda tidak memiliki Langganan Azure, buat Akun gratis Azure sebelum memulai.
Menambahkan dependensi dan plugin yang diperlukan ke proyek Anda
Tambahkan kode berikut ke file pom.xml Anda:
<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>
Menambahkan file JSON yang diperlukan
Tambahkan file host.json ke direktori proyek Anda. Ini akan terlihat mirip dengan contoh berikut:
{
"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)"
}
}
Catatan
Penting untuk dicatat bahwa hanya bundel ekstensi Azure Functions v4 yang saat ini memiliki dukungan yang diperlukan untuk Durable Functions untuk Java. Durable Functions untuk Java tidak didukung dalam bundel ekstensi v3 dan awal. Untuk informasi selengkapnya tentang bundel ekstensi, lihat dokumentasi bundel ekstensi.
Durable Functions membutuhkan penyedia penyimpanan untuk menyimpan status runtime. Tambahkan file local.settings.json ke direktori proyek Anda untuk mengonfigurasi penyedia penyimpanan. Untuk menggunakan Azure Storage sebagai penyedia, atur nilai AzureWebJobsStorage
ke string koneksi akun Azure Storage Anda:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "<your storage account connection string>",
"FUNCTIONS_WORKER_RUNTIME": "java"
}
}
Membuat fungsi Anda
Contoh kode berikut menunjukkan contoh dasar dari setiap jenis fungsi:
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();
}
}
Membuat proyek lokal dengan menggunakan perintah Maven
Jalankan perintah berikut untuk menghasilkan proyek yang berisi fungsi dasar aplikasi Durable Functions:
mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype -DarchetypeVersion=1.51 -Dtrigger=durablefunctions
Pada perintah, berikan informasi berikut:
Prompt | Perbuatan |
---|---|
groupId | Masukkan com.function. |
artifactId | Masukkan myDurableFunction. |
versi | Pilih 1.0-SNAPSHOT. |
package | Masukkan com.function. |
Y | Masukkan Y dan pilih Enter untuk mengonfirmasi. |
Sekarang Anda memiliki proyek lokal yang memiliki tiga fungsi yang ada di aplikasi Durable Functions dasar.
Periksa untuk memastikan bahwa com.microsoft:durabletask-azure-functions
ditetapkan sebagai dependensi dalam file pom.xml Anda.
Mengonfigurasi penyedia penyimpanan back-end
Durable Functions membutuhkan penyedia penyimpanan untuk menyimpan status runtime. Anda dapat mengatur Azure Storage sebagai penyedia penyimpanan di local.settings.json. Gunakan string koneksi akun penyimpanan Azure Anda sebagai nilai untuk AzureWebJobsStorage
seperti dalam contoh ini:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "<your storage account connection string>",
"FUNCTIONS_WORKER_RUNTIME": "java"
}
}
Membuat proyek lokal Anda
Di Visual Studio Code, pilih F1 (atau pilih Ctrl/Cmd+Shift+P) untuk membuka palet perintah. Pada perintah (
>
), masukkan lalu pilih Azure Functions: Buat Proyek Baru.Pilih Telusur. Dalam dialog Pilih Folder, buka folder yang akan digunakan untuk proyek Anda, lalu pilih Pilih.
Pada perintah, berikan informasi berikut:
Prompt Perbuatan Pilih Bahasa Pilih Java. Pilih versi Java Pilih Java 8 atau yang lebih baru. Pilih versi Java yang dijalankan fungsi Anda di Azure, dan versi yang Anda verifikasi secara lokal. Berikan ID grup Masukkan com.function. Berikan ID artefak Masukkan myDurableFunction. Berikan versi Masukkan 1.0-SNAPSHOT. Berikan nama paket Masukkan com.function. Berikan nama aplikasi Masukkan myDurableFunction. Pilih alat build untuk proyek Java Pilih Maven. Pilih bagaimana Anda ingin membuka proyek Anda Pilih Buka di jendela baru.
Anda sekarang memiliki proyek yang memiliki contoh fungsi HTTP. Anda dapat menghapus fungsi ini jika mau, karena Anda menambahkan fungsi dasar aplikasi Durable Functions di langkah berikutnya.
Menambahkan fungsi ke proyek
Di palet perintah, masukkan lalu pilih Azure Functions: Buat Fungsi.
Untuk Ubah filter templat, pilih Semua.
Pada perintah, berikan informasi berikut:
Prompt Perbuatan Pilih templat untuk fungsi Anda Pilih DurableFunctionsOrchestration. Berikan nama paket Masukkan com.function. Berikan nama fungsi Masukkan DurableFunctionsOrchestrator. Dalam dialog, pilih Pilih akun penyimpanan untuk menyiapkan akun penyimpanan, lalu ikuti perintah.
Anda sekarang harus memiliki tiga fungsi dasar yang dihasilkan untuk aplikasi Durable Functions.
Mengonfigurasi pom.xml dan host.json
Tambahkan dependensi berikut ke file pom.xml Anda:
<dependency>
<groupId>com.microsoft</groupId>
<artifactId>durabletask-azure-functions</artifactId>
<version>1.0.0</version>
</dependency>
Tambahkan properti ke extensions
file host.json Anda:
"extensions": { "durableTask": { "hubName": "JavaTestHub" }}
Uji fungsi secara lokal
Azure Functions Core Tools memberi Anda kemampuan untuk menjalankan proyek Azure Functions di komputer pengembangan lokal Anda.
Catatan
Durable Functions untuk Java memerlukan Azure Functions Core Tools versi 4.0.4915 atau yang lebih baru. Anda dapat melihat versi mana yang diinstal dengan menjalankan func --version
perintah di terminal.
Jika Anda menggunakan Visual Studio Code, buka jendela terminal baru dan jalankan perintah berikut untuk membangun proyek:
mvn clean package
Kemudian, jalankan fungsi tahan lama:
mvn azure-functions:run
Di panel terminal, salin titik akhir URL fungsi yang dipicu HTTP Anda.
Gunakan alat uji HTTP untuk mengirim permintaan HTTP POST ke titik akhir URL.
Responsnya akan terlihat seperti contoh berikut:
{ "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..." }
Responsnya adalah hasil awal fungsi HTTP. Ini memungkinkan Anda tahu bahwa orkestrasi tahan lama berhasil dimulai. Ini belum menampilkan hasil akhir orkestrasi. Respons mencakup beberapa URL yang berguna. Untuk saat ini, kueri status orkestrasi.
Salin nilai URL untuk
statusQueryGetUri
, tempelkan di bilah alamat browser Anda, dan jalankan permintaan. Atau, Anda dapat terus menggunakan alat uji HTTP untuk mengeluarkan permintaan GET.Permintaan meminta instans orkestrasi untuk status tersebut. Anda akan melihat bahwa instans selesai dan mencakup output atau hasil fungsi tahan lama, seperti dalam contoh ini:
{ "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" }