Pular para o conteúdo principal
Versão: 2.0

Primeiros passos com Durable Workflow 2.0

Antes de começar​

Objetivo: executar um workflow em modo serviço e ler seu resultado durável concluído com PHP, Python ou Rust.

Tempo estimado: cerca de 15 minutos depois que seu runtime estiver disponível.

Resultado final: o SDK escolhido inicia um worker e um workflow, depois exibe um identificador de workflow, status=completed e Hello, <language>!.

Pré-requisitos:

  • curl e um terminal
  • Docker para o caminho local sob sua administração, ou um namespace provisionado no Durable Workflow Cloud
  • ferramentas de uma linguagem: PHP 8.1+ com Composer, Python 3.10+ ou Rust 1.86+

O modo serviço não exige Laravel. O caminho para Laravel integrado aparece separadamente no fim deste guia.

1. Escolha seu runtime em modo serviço​

RuntimeQuando escolherPróxima ação
Durable Workflow CloudVocê quer que Durable Workflow opere o runtime, a persistência e o Managed Waterline.Siga o guia executável Primeiro workflow no Cloud, que conecta os programas completos de PHP, Python e Rust às credenciais provisionadas e a um resultado completed. Não execute Server nem um serviço Waterline separado.
Server sob sua administraçãoVocê quer operar o runtime ou executar este exercício local com os artefatos publicados.Continue abaixo com Docker e curl. Implante Waterline separadamente apenas se quiser sua interface de operação.

O exemplo abaixo usa um Server local sob sua administração. Assim, você pode executá-lo sem criar uma conta nem obter o código-fonte. O Cloud usa o mesmo modelo de SDK e worker. Substitua a conexão de desenvolvimento local pelos valores provisionados descritos em Runtime gerenciado do Cloud.

2. Inicie o Server local​

Pule esta etapa se escolheu Cloud. Para o caminho sob sua administração, expanda e execute a configuração com a versão fixada. Ela inicia um Server que não depende de um checkout do código-fonte, com SQLite e um token de desenvolvimento.

Iniciar a imagem fixada do 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: a verificação de prontidão é bem-sucedida e a resposta de informações do cluster identifica o Server local independente. Mantenha-o em execução enquanto conclui o caminho de uma linguagem.

3. Escolha uma linguagem​

Os três SDKs oficiais têm o mesmo destaque. Apenas a aba selecionada é exibida, para que você possa seguir um caminho sem percorrer os programas das outras duas linguagens.

Requisitos: PHP 8.1 ou superior e Composer. Este é o pacote durable-workflow/sdk, independente de framework, e não o mecanismo integrado ao Laravel.

  1. Instale o SDK.
mkdir durable-workflow-php-quickstart
cd durable-workflow-php-quickstart
composer require durable-workflow/sdk:2.2.6
  1. Adicione o worker e o cliente. Expanda o código completo e copie os dois arquivos para o novo projeto.
Código PHP completo para execução

O worker registra um tipo de workflow e um tipo de atividade em sua própria fila de tarefas.

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 e leitura do resultado​

Este cliente inicia um workflow com nome único, aguarda a execução selecionada e consulta o estado terminal durável mantido pelo 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. Execute o worker e o 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 e um resultado contendo "greeting":"Hello, PHP!". Você executou um worker PHP independente e inspecionou seu resultado durável sem Laravel.

Continue com o Guia do SDK PHP.

4. Remova o Server local​

Quem usa Cloud não tem um Server local para remover. Para o exercício sob sua administração:

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

Caminho separado: Laravel integrado​

Laravel integrado é um modo oficial de implantação em PHP para aplicações que querem manter o estado dos workflows, a execução em fila, a configuração e as ferramentas de operação na infraestrutura Laravel existente. Ele instala durable-workflow/workflow. Não usa Server nem durable-workflow/sdk.

Crie uma aplicação integrada com o pacote 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 usar a interface de operação dentro da mesma aplicação Laravel, adicione o pacote Composer qualificado do Waterline integrado:

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

Esse pacote Composer não é a forma de instalar o serviço Waterline separado para um Server sob sua administração. Laravel integrado não executa Server nem instala um SDK de modo serviço.

Continue em Instalação integrada para configurar uma fila Laravel diferente de sync. Depois, defina e inicie um workflow integrado. Modos de implantação compara esse caminho especializado com a plataforma em modo serviço.

Próximos passos​

Para os recursos de código do Laravel integrado, como temporizadores, sinais, consultas, atividades e workflows filhos, use a Documentação integrada.

A qualificação de releases é separada deste guia de primeiro resultado. A Suíte de conformidade da plataforma reúne a matriz exata de artefatos, as verificações do código público, os registros completos de execução, os critérios de tempo, a limpeza e o contrato de primeiros passos legível por máquina.