Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Use Durable Functions, una característica de Azure Functions para escribir flujos de trabajo sin servidor con estado en PowerShell. En este inicio rápido, clonará y ejecutará una aplicación de ejemplo que muestra dos patrones de orquestación comunes:
- Encadenamiento de funciones: llama a actividades secuencialmente (Tokio → Seattle → Londres).
- Fan-out/fan-in: invoca actividades en paralelo en cinco ciudades y, a continuación, agrega los resultados.
Al final, tendrás ambas orquestaciones ejecutándose en local con el emulador Durable Task Scheduler y podrás ver su estado en el panel de control.
- Clona y prepara el proyecto de ejemplo Hello Cities.
- Configure el emulador de Durable Task Scheduler y Azurite para el desarrollo local.
- Ejecute la aplicación de funciones y desencadene ambas orquestaciones.
- Consulte el estado y el resultado de la orquestación en el panel de Durable Task Scheduler.
Prerrequisitos
- PowerShell 7.4+ instalado.
- Azure Functions Core Tools v4 o posterior.
- Docker para ejecutar el emulador y Azurite.
- Clona el repositorio de GitHub Durable Task Scheduler para utilizar el ejemplo quickstart.
Configuración del emulador del Programador de tareas duraderas
El emulador del programador de tareas de Durable proporciona un entorno de desarrollo local para que pueda probar orquestaciones sin una suscripción Azure. El host de Funciones de PowerShell también requiere Azurite para el almacenamiento local.
Inicie ambos contenedores:
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
Una vez que el emulador esté en ejecución, puede acceder al panel de Durable Task Scheduler en http://localhost:8082 para supervisar las orquestaciones.
Ejecución del ejemplo de inicio rápido
Vaya al directorio de ejemplo Hello Cities:
cd samples/durable-functions/powershell/HelloCitiesCompruebe que el
local.settings.jsonarchivo contiene la siguiente configuración:{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "powershell", "DURABLE_TASK_SCHEDULER_CONNECTION_STRING": "Endpoint=http://localhost:8080;TaskHub=default;Authentication=None" } }Inicie la aplicación de funciones:
func startEn un terminal independiente, active la orquestación del encadenamiento de funciones:
$response = Invoke-RestMethod -Method POST -Uri http://localhost:7071/api/StartChaining $responseLa respuesta contiene direcciones URL de estado para la instancia de orquestación. Copie el
statusQueryGetUrivalor y ejecútelo para comprobar el resultado:Invoke-RestMethod -Uri $response.statusQueryGetUriInicie la orquestación fan-out/fan-in:
$response = Invoke-RestMethod -Method POST -Uri http://localhost:7071/api/StartFanOutFanIn Invoke-RestMethod -Uri $response.statusQueryGetUri
Salida prevista
La solicitud POST devuelve una respuesta JSON con direcciones URL de estado. Por ejemplo:
{
"id": "<instanceId>",
"statusQueryGetUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/<instanceId>?code=...",
"sendEventPostUri": "...",
"terminatePostUri": "...",
"purgeHistoryDeleteUri": "..."
}
Cuando consulte statusQueryGetUri y la runtimeStatus de la orquestación sea Completed, podrá encontrar los resultados del saludo en el campo output. La orquestación en cadena devuelve:
{
"name": "ChainingOrchestration",
"runtimeStatus": "Completed",
"output": ["Hello Tokyo!", "Hello Seattle!", "Hello London!"]
}
La orquestación fan-out/fan-in devuelve:
{
"name": "FanOutFanInOrchestration",
"runtimeStatus": "Completed",
"output": ["Hello Tokyo!", "Hello Seattle!", "Hello London!", "Hello Paris!", "Hello Berlin!"]
}
Tip
Si runtimeStatus muestra Running o Pending, espere un momento y vuelva a consultarlo statusQueryGetUri .
Abra el panel del Programador de tareas durables en http://localhost:8082 para ver el estado de orquestación y el historial de ejecución.
Descripción del código
El proyecto de ejemplo usa el modelo de función de PowerShell donde cada función reside en su propio subdirectorio con un function.json archivo de enlace y un run.ps1 script.
Función de actividad
La SayHello actividad (SayHello/run.ps1) toma un nombre de ciudad y devuelve un saludo:
param($city)
Write-Host "Saying hello to $city."
"Hello $city!"
Funciones del Orquestador
El orquestador de encadenamiento (ChainingOrchestration/run.ps1) llama a SayHello de forma secuencial para tres ciudades:
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
El orquestador fan-out/fan-in (FanOutFanInOrchestration/run.ps1) programa actividades en paralelo:
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
Funciones de cliente
Las funciones de cliente desencadenadas por HTTP inician cada orquestación. Por ejemplo, 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
Configuración
En el ejemplo se usa el emulador de Durable Task Scheduler como back-end de almacenamiento. Esto se configura en 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
}
}
La configuración managedDependency instala automáticamente los módulos de PowerShell necesarios definidos en requirements.psd1, incluido el SDK de Durable Functions.
Limpieza de recursos
Detenga los contenedores del emulador cuando haya terminado:
docker stop dtsemulator azurite && docker rm dtsemulator azurite
Pasos siguientes
- Obtenga información sobre patrones comunes de aplicaciones de Durable Functions.
- Revise la guía del SDK de PowerShell independiente.
- Más información sobre los proveedores de almacenamiento de Durable Functions.