Saltar al contenido principal
Versión: 2.0

Inicio rápido de Durable Workflow 2.0

Antes de empezar​

Objetivo: ejecutar un workflow en modo servicio y leer su resultado duradero con PHP, Python o Rust.

Tiempo estimado: unos 15 minutos una vez disponible el entorno de ejecución.

Resultado final: el SDK elegido inicia un worker y un workflow, e imprime el ID del workflow, status=completed y Hello, <language>!.

Requisitos:

  • curl y una terminal.
  • Docker para la ruta local autogestionada, o un espacio de nombres provisionado en Durable Workflow Cloud.
  • Las herramientas de un lenguaje: PHP 8.1+ con Composer, Python 3.10+ o Rust 1.86+.

El modo servicio no requiere Laravel. La ruta de Laravel integrado aparece por separado al final de esta guía.

1. Elige tu entorno en modo servicio​

EntornoCuándo elegirloSiguiente paso
Durable Workflow CloudQuieres que Durable Workflow opere el entorno, la persistencia y Managed Waterline.Sigue Tu primer workflow en Cloud, con programas completos de PHP, Python y Rust, credenciales provisionadas y un resultado completed. No ejecutes Server ni un servicio Waterline separado.
Server autogestionadoQuieres operar el entorno o realizar este ejercicio local con artefactos publicados.Continúa con Docker y curl. Despliega Waterline por separado si necesitas su interfaz de operación.

Los ejemplos siguientes usan un Server local autogestionado, sin cuenta ni descarga del código fuente. Cloud usa los mismos SDK y workers. Sustituye la conexión local de desarrollo por los datos provisionados que aparecen en Entorno gestionado de Cloud.

2. Inicia el Server local​

Si elegiste Cloud, pasa al siguiente paso. Para la ruta autogestionada, despliega y ejecuta la configuración fijada. Inicia Server con SQLite y un token de desarrollo, sin descargar el código fuente.

Iniciar la imagen fijada de Server
export DW_SERVER_IMAGE=durableworkflow/server:2.5.13
export DW_AUTH_TOKEN=dev-token

docker volume create durable-workflow-quickstart

docker run --rm \
-v durable-workflow-quickstart:/app/database \
-e DW_AUTH_DRIVER=token \
-e DW_AUTH_TOKEN="$DW_AUTH_TOKEN" \
"$DW_SERVER_IMAGE" server-bootstrap

docker rm -f durable-workflow-server >/dev/null 2>&1 || true
docker run -d --name durable-workflow-server \
-p 8080:8080 \
-v durable-workflow-quickstart:/app/database \
-e DW_AUTH_DRIVER=token \
-e DW_AUTH_TOKEN="$DW_AUTH_TOKEN" \
"$DW_SERVER_IMAGE"

until curl -sf http://localhost:8080/api/ready >/dev/null; do sleep 1; done
curl -H "Authorization: Bearer $DW_AUTH_TOKEN" \
http://localhost:8080/api/cluster/info

Resultado esperado: la comprobación de disponibilidad responde correctamente y la información del clúster identifica el Server local. Déjalo en ejecución mientras completas la ruta de un lenguaje.

3. Elige un lenguaje​

Puedes elegir cualquiera de los tres SDK oficiales. Solo se muestra la pestaña seleccionada para que sigas una ruta completa.

Requisitos: PHP 8.1 o posterior y Composer. Esta ruta usa durable-workflow/sdk, independiente del framework.

  1. Instala el SDK.
mkdir durable-workflow-php-quickstart
cd durable-workflow-php-quickstart
composer require durable-workflow/sdk:2.2.6
  1. Añade el worker y el cliente. Abre el código completo y copia los dos archivos en el proyecto nuevo.
Código PHP completo y ejecutable

El worker registra un tipo de workflow y un tipo de actividad en su propia cola de tareas.

cat > worker.php <<'PHP'
<?php

declare(strict_types=1);

require __DIR__.'/vendor/autoload.php';

use DurableWorkflow\Client;
use DurableWorkflow\Worker;
use DurableWorkflow\Worker\ActivityContext;
use DurableWorkflow\Worker\WorkflowContext;

$client = new Client('http://localhost:8080', token: 'dev-token');
$worker = new Worker($client, 'quickstart-php');

$worker->registerActivity(
'quickstart.greet',
static fn (ActivityContext $context, string $name): string => "Hello, {$name}!",
);

$worker->registerWorkflow(
'quickstart.greeter',
static function (WorkflowContext $context, string $name): array {
$greeting = $context->activity('quickstart.greet', [$name]);

return ['greeting' => $greeting, 'language' => 'php'];
},
);

$worker->run();
PHP

Cliente y lectura del resultado​

El cliente inicia un workflow con un nombre único, espera a la ejecución seleccionada y consulta el estado terminal duradero guardado por Server.

cat > start.php <<'PHP'
<?php

declare(strict_types=1);

require __DIR__.'/vendor/autoload.php';

use DurableWorkflow\Client;

$client = new Client('http://localhost:8080', token: 'dev-token');
$workflowId = 'quickstart-php-greeter-'.bin2hex(random_bytes(4));
$handle = $client->startWorkflow(
workflowType: 'quickstart.greeter',
workflowId: $workflowId,
taskQueue: 'quickstart-php',
input: ['PHP'],
);

$result = $handle->result(timeoutSeconds: 30);
$execution = $handle->describeSelectedRun();

echo "workflow_id={$execution->workflowId}\n";
echo "status={$execution->status}\n";
echo 'result='.json_encode($result, JSON_THROW_ON_ERROR)."\n";
PHP
  1. Ejecuta el worker y el cliente.
php worker.php > quickstart-worker.log 2>&1 &
export QUICKSTART_WORKER_PID=$!
trap 'kill "$QUICKSTART_WORKER_PID" 2>/dev/null || true' EXIT

php start.php

kill "$QUICKSTART_WORKER_PID" 2>/dev/null || true
trap - EXIT

Resultado esperado: status=completed y un resultado con "greeting":"Hello, PHP!". Has ejecutado un worker PHP independiente y consultado su resultado duradero sin Laravel.

Continúa con la Guía del SDK PHP.

4. Elimina los recursos del Server local​

Cloud no necesita un Server local. Al terminar el ejercicio autogestionado:

docker rm -f durable-workflow-server
docker volume rm durable-workflow-quickstart

Ruta separada: Laravel integrado​

Laravel integrado es un modelo de despliegue PHP para aplicaciones que quieren mantener el estado de los workflows, las colas, la configuración y las herramientas de operación dentro de su infraestructura Laravel. Instala durable-workflow/workflow. Esta ruta no usa Server ni durable-workflow/sdk.

Inicia una aplicación integrada nueva con el paquete publicado:

composer create-project laravel/laravel durable-workflow-laravel-quickstart
cd durable-workflow-laravel-quickstart
composer require durable-workflow/workflow:2.5.4
php artisan migrate
php artisan queue:work

Para añadir la interfaz de operación a esa misma aplicación, instala el paquete Composer de Waterline integrado:

composer require durable-workflow/waterline:2.3.1
php artisan waterline:install

Este paquete Composer corresponde al modo integrado. El servicio Waterline autogestionado se despliega por separado. Laravel integrado no ejecuta Server ni instala los SDK del modo servicio.

Continúa con la Instalación integrada para configurar una cola Laravel distinta de sync. Después, define e inicia un workflow integrado. Modos de despliegue compara esta ruta con la plataforma en modo servicio.

Siguientes pasos​

Para las funciones de Laravel integrado, como temporizadores, señales, consultas, actividades y workflows hijos, usa la Documentación del modo integrado.

La Suite de conformidad de la plataforma documenta la validación de versiones: matriz exacta de artefactos, comprobaciones del código público, registros completos, criterios de tiempo, limpieza y contrato de inicio rápido legible por máquinas.