Перейти до основного вмісту
Версія: 2.0

Швидкий старт Durable Workflow 2.0

Перед початком​

Мета: виконати один workflow сервісного режиму та прочитати його завершений стійкий результат із PHP, Python або Rust.

Очікуваний час: приблизно 15 хвилин після підготовки runtime.

Результат завершення: обраний SDK запускає worker і workflow, потім друкує ID workflow, status=completed і Hello, <language>!.

Передумови:

  • curl і термінал;
  • Docker для локального власного розгортання або підготовлений простір імен Durable Workflow Cloud;
  • інструменти однієї мови: PHP 8.1+ із Composer, Python 3.10+ або Rust 1.86+.

Сервісний режим не потребує Laravel. Окремий шлях вбудованого Laravel наведено наприкінці посібника.

1. Оберіть runtime сервісного режиму​

RuntimeКоли обратиНаступна дія
Durable Workflow CloudВи хочете, щоб Durable Workflow обслуговував runtime, збереження стану та Managed Waterline.Виконайте перший workflow Cloud, що зіставляє повні приклади PHP, Python і Rust з наданими обліковими даними та результатом completed. Не запускайте Server або окрему службу Waterline.
Власний ServerВи хочете обслуговувати runtime самостійно або виконати цей точний локальний приклад на опублікованих артефактах.Продовжіть нижче з Docker і curl. Окремо розгортайте Waterline лише за потреби його UI оператора.

Виконуваний код нижче використовує локальний власний Server, щоб приклад працював без облікового запису чи checkout вихідного коду. Cloud використовує ту саму модель SDK та worker. Замініть локальне підключення розробки на надані значення з керованого runtime Cloud.

2. Запустіть локальний Server​

Пропустіть цю дію, якщо обрали Cloud. Для власного розгортання розгорніть і виконайте точне закріплене налаштування. Воно запускає Server без вихідного checkout із SQLite та токеном розробки.

Запустіть закріплений образ 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

Очікуваний результат: запит готовності успішний, а cluster info визначає локальний окремий Server. Залиште його запущеним під час виконання шляху обраної мови.

3. Оберіть одну мову​

Усі три офіційні SDK доступні на одному рівні. Показується лише обрана вкладка, щоб ви виконали один шлях без прокручування двох інших програм.

Вимоги: PHP 8.1 або новіший і Composer. Використовується незалежний від фреймворку пакет durable-workflow/sdk.

  1. Встановіть SDK.
mkdir durable-workflow-php-quickstart
cd durable-workflow-php-quickstart
composer require durable-workflow/sdk:2.2.6
  1. Додайте worker і клієнт. Розгорніть повний код і скопіюйте обидва файли в новий проєкт.
Повний виконуваний код PHP

Worker реєструє один тип workflow та один тип activity у власній черзі завдань.

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

Клієнт і читання результату​

Цей клієнт запускає workflow з унікальною назвою, очікує його обраний run і потім описує стійкий термінальний стан, збережений 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. Запустіть worker і клієнт.
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

Очікуваний результат: status=completed і результат із "greeting":"Hello, PHP!". Ви запустили окремий worker PHP та переглянули його стійкий результат без Laravel.

Продовжіть із посібником PHP SDK.

4. Приберіть локальний Server​

Користувачам Cloud не потрібно видаляти локальний Server. Для прикладу власного розгортання:

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

Окремий шлях: вбудований Laravel​

Вбудований Laravel — окремий офіційний режим розгортання PHP для застосунків, яким потрібні стан workflow, виконання черг, налаштування й інструменти оператора всередині наявної інфраструктури Laravel. Він встановлює durable-workflow/workflow без окремого Server або durable-workflow/sdk.

Створіть новий вбудований застосунок з опублікованим пакетом:

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

Для UI оператора в тому самому Laravel-застосунку додайте перевірений вбудований пакет Waterline Composer:

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

Цей пакет Composer відрізняється від окремо розгорнутої служби Waterline для власного Server. Вбудований Laravel не запускає Server і не встановлює SDK сервісного режиму.

Продовжіть із вбудованим встановленням для налаштування черги Laravel, відмінної від sync, потім визначте і запустіть вбудований workflow. Режими розгортання порівнюють цей спеціалізований шлях із платформою сервісного режиму.

Наступні кроки​

Для написання вбудованих timer, signal, query, activity та дочірніх workflow Laravel використовуйте окрему вбудовану документацію.

Набір перевірок відповідності платформи містить вимоги до перевірки випуску: точну матрицю артефактів, перевірки публічних джерел, повні журнали виконання, критерії реального часу, прибирання та машиночитаний контракт quickstart для сертифікації.