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 alur kerja tanpa server stateful di PowerShell. Dalam panduan singkat ini, Anda mengklon dan menjalankan aplikasi contoh yang menunjukkan dua pola orkestrasi umum:
- Penautan fungsi: Memanggil aktivitas secara berurutan (Tokyo → Seattle → London).
- Fan-out/fan-in: Memanggil aktivitas secara paralel di lima kota, lalu menggabungkan hasilnya.
Pada akhirnya, Anda akan memiliki kedua orkestrasi yang berjalan secara lokal dengan emulator Durable Task Scheduler dan dapat melihat statusnya di dasbor.
- Kloning dan siapkan proyek sampel Hello Cities.
- Siapkan emulator Durable Task Scheduler dan Azurite untuk pengembangan lokal.
- Jalankan aplikasi fungsi dan picu kedua orkestrasi.
- Tinjau status orkestrasi dan output di dasbor Durable Task Scheduler.
Prerequisites
- PowerShell 7.4+ terpasang.
- Azure Functions Core Tools v4 atau yang lebih baru.
- Docker untuk menjalankan emulator dan Azurite.
- Klon Durable Task Scheduler GitHub repositori tersebut untuk menggunakan contoh memulai cepat.
Menyiapkan emulator "Durable Task Scheduler"
Emulator Task Scheduler Durable menyediakan lingkungan pengembangan lokal sehingga Anda dapat menguji orkestrasi tanpa langganan Azure. Host PowerShell Functions juga memerlukan Azurite untuk penyimpanan lokal.
Mulai kedua kontainer:
docker run -d --name dtsemulator -p 8080:8080 -p 8082:8082 \
mcr.microsoft.com/dts/dts-emulator:latest
docker run -d --name azurite -p 10000:10000 -p 10001:10001 -p 10002:10002 \
mcr.microsoft.com/azure-storage/azurite
Tip
Setelah emulator berjalan, Anda dapat mengakses dasbor Durable Task Scheduler di http://localhost:8082 untuk memantau orkestrasi.
Jalankan contoh memulai cepat
Navigasikan ke direktori sampel Hello Cities:
cd samples/durable-functions/powershell/HelloCitiesVerifikasi bahwa
local.settings.jsonfile berisi konfigurasi berikut:{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "powershell", "DURABLE_TASK_SCHEDULER_CONNECTION_STRING": "Endpoint=http://localhost:8080;TaskHub=default;Authentication=None" } }Mulai aplikasi fungsi:
func startDi terminal terpisah, jalankan orkestrasi rantai fungsi:
$response = Invoke-RestMethod -Method POST -Uri http://localhost:7071/api/StartChaining $responseRespons berisi URL status untuk instans orkestrasi.
statusQueryGetUriSalin nilai dan jalankan untuk memeriksa hasilnya:Invoke-RestMethod -Uri $response.statusQueryGetUriPicu orkestrasi fan-out/fan-in:
$response = Invoke-RestMethod -Method POST -Uri http://localhost:7071/api/StartFanOutFanIn Invoke-RestMethod -Uri $response.statusQueryGetUri
Output yang diharapkan
Permintaan POST mengembalikan respons JSON dengan URL status. Contohnya:
{
"id": "<instanceId>",
"statusQueryGetUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/<instanceId>?code=...",
"sendEventPostUri": "...",
"terminatePostUri": "...",
"purgeHistoryDeleteUri": "..."
}
Saat Anda mengkueri statusQueryGetUri dan orkestrasi runtimeStatus adalah Completed, Anda bisa menemukan hasil salam di output bidang . Orkestrasi perangkaian mengembalikan:
{
"name": "ChainingOrchestration",
"runtimeStatus": "Completed",
"output": ["Hello Tokyo!", "Hello Seattle!", "Hello London!"]
}
Orkestrasi fan-out/fan-in mengembalikan:
{
"name": "FanOutFanInOrchestration",
"runtimeStatus": "Completed",
"output": ["Hello Tokyo!", "Hello Seattle!", "Hello London!", "Hello Paris!", "Hello Berlin!"]
}
Tip
Jika runtimeStatus memperlihatkan Running atau Pending, tunggu sebentar dan kueri lagi statusQueryGetUri .
Buka dasbor Durable Task Scheduler di http://localhost:8082 untuk melihat status orkestrasi dan riwayat eksekusi.
Memahami kode
Proyek sampel menggunakan model fungsi PowerShell tempat setiap fungsi berada di subdirektorinya sendiri dengan function.json file pengikatan dan run.ps1 skrip.
Fungsi aktivitas
Aktivitas SayHello (SayHello/run.ps1) mengambil nama kota dan mengembalikan salam:
param($city)
Write-Host "Saying hello to $city."
"Hello $city!"
Fungsi orkestrator
Orkestrator perangkaian (ChainingOrchestration/run.ps1) memanggil SayHello secara berurutan untuk tiga kota:
param($Context)
$output = @()
$output += Invoke-DurableActivity -FunctionName 'SayHello' -Input 'Tokyo'
$output += Invoke-DurableActivity -FunctionName 'SayHello' -Input 'Seattle'
$output += Invoke-DurableActivity -FunctionName 'SayHello' -Input 'London'
$output
Orkestrator fan-out/fan-in (FanOutFanInOrchestration/run.ps1) menjadwalkan aktivitas secara paralel:
param($Context)
$cities = @('Tokyo', 'Seattle', 'London', 'Paris', 'Berlin')
# Fan-out: schedule all activities in parallel
$parallelTasks = @()
foreach ($city in $cities) {
$parallelTasks += Invoke-DurableActivity -FunctionName 'SayHello' -Input $city -NoWait
}
# Fan-in: wait for all to complete
$output = Wait-ActivityFunction -Task $parallelTasks
$output
Fungsi klien
Fungsi klien yang dipicu HTTP memulai setiap orkestrasi. Misalnya, StartChaining/run.ps1:
param($Request, $TriggerMetadata)
$instanceId = Start-DurableOrchestration -FunctionName 'ChainingOrchestration'
Write-Host "Started chaining orchestration with ID = '$instanceId'."
$response = New-DurableOrchestrationCheckStatusResponse -Request $Request -InstanceId $instanceId
Push-OutputBinding -Name Response -Value $response
Konfigurasi
Sampel menggunakan emulator Durable Task Scheduler sebagai backend penyimpanannya. Ini dikonfigurasi dalam host.json:
{
"version": "2.0",
"extensions": {
"durableTask": {
"hubName": "default",
"storageProvider": {
"type": "azureManaged",
"connectionStringName": "DURABLE_TASK_SCHEDULER_CONNECTION_STRING"
}
}
},
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[4.*, 5.0.0)"
},
"managedDependency": {
"enabled": true
}
}
Pengaturan managedDependency secara otomatis menginstal modul PowerShell yang diperlukan yang ditentukan dalam requirements.psd1, termasuk SDK Durable Functions.
Membersihkan sumber daya
Hentikan kontainer emulator setelah Anda selesai:
docker stop dtsemulator azurite && docker rm dtsemulator azurite
Langkah berikutnya
- Pelajari tentang pola aplikasi common Durable Functions.
- Tinjau panduan PowerShell SDK mandiri.
- Pelajari tentang penyedia penyimpanan Durable Functions.