Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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 panduan cepat ini, Anda membuat dan menguji aplikasi Durable Functions dengan Java.
Aplikasi Durable Functions dasar memiliki tiga fungsi:
-
Fungsi orkestrator (
Cities): Alur kerja yang mengatur fungsi lain. -
Fungsi aktivitas (
Capitalize): Fungsi yang dipanggil orkestrator untuk melakukan pekerjaan dan mengembalikan nilai. -
Fungsi klien (
StartOrchestration): Fungsi yang dipicu HTTP yang memulai orkestrator.
Panduan memulai cepat ini memiliki tiga jalur penyiapan. Gunakan pemilih di bagian atas halaman untuk memilih pendekatan pilihan Anda:
- Penyiapan manual: Buat setiap file secara manual untuk kontrol penuh atas struktur proyek.
- Perintah Maven: Gunakan arketipe Maven untuk membuat perancah proyek dalam satu perintah.
- Visual Studio Code: Gunakan ekstensi Azure Functions Visual Studio Code untuk menghasilkan proyek melalui UI terpandu.
Prasyarat
Untuk menyelesaikan panduan memulai 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.
Visual Studio Code dengan ekstensi Azure Functions terinstal (hanya diperlukan untuk jalur penyiapan Visual Studio Code).
Sebuah langganan Azure. Untuk menggunakan Durable Functions, Anda harus memiliki akun Azure Storage.
Jika Anda tidak memiliki akun Azure, buat akun gratis sebelum memulai.
Menambahkan dependensi dan plugin yang diperlukan ke proyek Anda
Tambahkan kode berikut ke file pom.xml Anda. Sebelum Anda menyalinnya, ganti your-unique-app-name dengan nama aplikasi fungsi yang unik secara global. Sesuaikan region, javaVersion, dan resourceGroup agar sesuai dengan lingkungan 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)"
}
}
Nota
Durable Functions untuk Java memerlukan bundel ekstensi v4. Paket sebelumnya tidak didukung. Untuk informasi selengkapnya, 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"
}
}
Important
File local.settings.json dapat berisi rahasia. Pastikan Anda menambahkannya ke file .gitignore Anda untuk menghindari penerapannya ke kontrol sumber.
Buat fungsi orkestrator, aktivitas, dan klien Durable Functions 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 Durable Functions 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.62 -Dtrigger=durablefunctions
Pada perintah, berikan informasi berikut:
| Petunjuk | Action |
|---|---|
| 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. Arketipe ini menyertakan com.microsoft:durabletask-azure-functions sebagai dependensi dalam file pom.xml Anda secara otomatis.
Mengonfigurasi penyedia penyimpanan back-end untuk Durable Functions
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"
}
}
Important
File local.settings.json dapat berisi rahasia. Pastikan Anda menambahkannya ke file .gitignore Anda untuk menghindari penerapannya ke kontrol sumber.
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 Telusuri. Dalam dialog Pilih Folder, buka folder yang akan digunakan untuk proyek Anda, lalu pilih Pilih.
Pada perintah, berikan informasi berikut:
Petunjuk Action Pilih Bahasa Pilih Java. Pilih versi Java Pilih Java 8 atau 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 HTTP yang dihasilkan, karena Anda menambahkan 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:
Petunjuk Action 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 untuk Durable Functions
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. Jika file sudah memiliki properti lain, gabungkan extensions blok ke JSON yang ada:
{
"version": "2.0",
"extensions": {
"durableTask": {
"hubName": "JavaTestHub"
}
},
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[4.*, 5.0.0)"
}
}
Uji fungsi secara lokal
Azure Functions Core Tools memberi Anda kemampuan untuk menjalankan proyek Azure Functions di komputer pengembangan lokal Anda.
Jika Anda menggunakan Visual Studio Code, buka jendela terminal baru dan jalankan perintah berikut untuk membangun proyek:
mvn clean packageKemudian, jalankan fungsi tahan lama:
mvn azure-functions:runDi panel terminal, salin titik akhir URL fungsi yang dipicu HTTP Anda.
Gunakan alat uji HTTP Anda 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, periksa 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 mengakses instance orkestrasi untuk status. Anda dapat melihat bahwa instans telah selesai dan mencakup output atau hasil dari fungsi durabel, 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" }