Zum Hauptinhalt springen
Version: 2.0

Schnellstart mit Durable Workflow 2.0

Bevor Sie beginnen​

Ziel: Führen Sie einen Workflow im Dienstmodus aus und lesen Sie sein dauerhaft gespeichertes Ergebnis mit PHP, Python oder Rust.

Zeitbedarf: ungefähr 15 Minuten, sobald die Laufzeitumgebung verfügbar ist.

Ergebnis: Das gewählte SDK startet einen Worker und einen Workflow. Anschließend gibt es eine Workflow-Kennung, status=completed und Hello, <language>! aus.

Voraussetzungen:

  • curl und ein Terminal
  • Docker für den lokalen Selbstbetrieb oder ein bereitgestellter Durable Workflow Cloud-Namespace
  • eine Sprachumgebung: PHP 8.1+ mit Composer, Python 3.10+ oder Rust 1.86+

Der Dienstmodus benötigt Laravel nicht. Der Weg für eingebettetes Laravel steht am Ende dieses Leitfadens.

1. Eine Laufzeitumgebung im Dienstmodus wählen​

LaufzeitumgebungWann sie passtNächster Schritt
Durable Workflow CloudDurable Workflow soll Laufzeitumgebung, dauerhafte Speicherung und Managed Waterline betreiben.Folgen Sie dem ausführbaren ersten Cloud-Workflow. Er verbindet die vollständigen PHP-, Python- und Rust-Beispiele mit bereitgestellten Zugangsdaten und einem completed-Ergebnis. Betreiben Sie keinen Server oder separaten Waterline-Dienst.
Selbst betriebener ServerSie möchten die Laufzeitumgebung selbst betreiben oder dieses lokale Beispiel mit veröffentlichten Paketen und Images ausführen.Folgen Sie den Docker- und curl-Schritten unten. Waterline wird nur bei Bedarf als separate Betriebsoberfläche bereitgestellt.

Das folgende Beispiel verwendet einen lokalen Server und benötigt weder ein Konto noch einen Quellcode-Checkout. Cloud nutzt dasselbe SDK- und Worker-Modell. Ersetzen Sie dort die lokale Entwicklungsverbindung durch die bereitgestellten Werte aus der Cloud-Laufzeitumgebung.

2. Den lokalen Server starten​

Überspringen Sie diesen Schritt bei Cloud. Für den Selbstbetrieb klappen Sie die festgelegte Konfiguration auf und führen sie aus. Sie startet das veröffentlichte Server-Image mit SQLite und einem Entwicklungstoken.

Das festgelegte Server-Image starten
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

Erwartetes Ergebnis: Die Bereitschaftsabfrage ist erfolgreich und die Clusterinformationen nennen den lokalen eigenständigen Server. Lassen Sie ihn laufen, während Sie einen Sprachpfad abschließen.

3. Eine Sprache wählen​

Alle drei offiziellen SDKs stehen gleichberechtigt zur Verfügung. Es wird nur der gewählte Tab angezeigt, damit Sie einem Beispiel folgen können.

Voraussetzungen: PHP 8.1 oder neuer und Composer. Dieser Weg verwendet das frameworkunabhängige Paket durable-workflow/sdk.

  1. Das SDK installieren.
mkdir durable-workflow-php-quickstart
cd durable-workflow-php-quickstart
composer require durable-workflow/sdk:2.2.6
  1. Worker und Client hinzufügen. Klappen Sie den vollständigen Quellcode auf und kopieren Sie beide Dateien in das neue Projekt.
Vollständiger ausführbarer PHP-Quellcode

Der Worker registriert einen Workflow-Typ und einen Aktivitätstyp in seiner eigenen Aufgabenwarteschlange.

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

Client und Ergebnisabfrage​

Der Client startet einen eindeutig benannten Workflow, wartet auf den ausgewählten Lauf und liest anschließend dessen dauerhaft gespeicherten Endzustand vom 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 und Client ausführen.
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

Erwartetes Ergebnis: status=completed und ein Ergebnis mit "greeting":"Hello, PHP!". Damit haben Sie einen eigenständigen PHP-Worker ausgeführt und sein dauerhaftes Ergebnis ohne Laravel geprüft.

Fahren Sie mit dem PHP-SDK-Leitfaden fort.

4. Den lokalen Server entfernen​

Cloud-Nutzer haben keinen lokalen Server zu entfernen. Für das lokale Beispiel:

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

Eigener Weg für eingebettetes Laravel​

Eingebettetes Laravel ist ein offizielles PHP-Bereitstellungsmodell für Anwendungen, die Workflow-Zustand, Queue-Ausführung, Konfiguration und Betriebswerkzeuge in ihrer vorhandenen Laravel-Infrastruktur halten möchten. Es installiert durable-workflow/workflow. Es verwendet weder den eigenständigen Server noch durable-workflow/sdk.

Beginnen Sie eine neue eingebettete Anwendung mit dem veröffentlichten Paket:

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

Für die Betriebsoberfläche in derselben Laravel-Anwendung installieren Sie das qualifizierte eingebettete Waterline-Composer-Paket:

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

Dieses Composer-Paket installiert den eingebetteten Modus. Der separat bereitgestellte Waterline-Dienst für einen selbst betriebenen Server hat eine andere Installationsform. Eingebettetes Laravel benötigt keinen Server und keines der Dienstmodus-SDKs.

Konfigurieren Sie mit der eingebetteten Installation eine Laravel-Queue ohne sync-Treiber. Definieren und starten Sie anschließend einen eingebetteten Workflow. Die Bereitstellungsmodelle vergleichen diesen Weg mit der Dienstplattform.

Nächste Schritte​

Funktionen für eingebettetes Laravel wie Timer, Signale, Abfragen, Aktivitäten und untergeordnete Workflows finden Sie in der Dokumentation des eingebetteten Modus.

Die Veröffentlichungsqualifikation ist vom ersten erfolgreichen Workflow getrennt. Die Plattform-Konformitätssuite enthält die exakte Artefaktmatrix, Quellcodeprüfungen, vollständige Ausführungsprotokolle, Zeitkriterien, Bereinigung und den maschinenlesbaren Schnellstartvertrag für die Zertifizierung.