Exportera och spela upp arbetsflöden igen
Queuety kan exportera ett arbetsflödes fullständiga körningshistorik till ett portabelt format av typen JSON och spela upp det igen i en annan miljö. Det är användbart för att återskapa produktionsfel lokalt, flytta arbetsflöden mellan miljöer och granska körningar.
Exportera ett arbetsflöde
PHP API
Anropa Queuety::export_workflow() med arbetsflödes-ID:t. Metoden returnerar en array som kan serialiseras som JSON:
use Queuety\Queuety;
$data = Queuety::export_workflow( $workflow_id );
Hämta en JSON-sträng direkt:
$json = json_encode( $data, JSON_PRETTY_PRINT );
file_put_contents( '/tmp/workflow-42.json', $json );
CLI
wp queuety workflow export <id> [--output=<file>]
| Alternativ | Beskrivning |
|---|---|
<id> |
Arbetsflödes-ID (obligatoriskt) |
--output=<file> |
Filsökväg där JSON ska skrivas. Standard är stdout. |
# Print to stdout
wp queuety workflow export 42
# Write to a file
wp queuety workflow export 42 --output=/tmp/workflow-42.json
Spela upp ett arbetsflöde igen
PHP API
Anropa Queuety::replay_workflow() med exportdata. Metoden returnerar det nya arbetsflödes-ID:t:
use Queuety\Queuety;
$json = file_get_contents( '/tmp/workflow-42.json' );
$data = json_decode( $json, true );
$new_id = Queuety::replay_workflow( $data );
CLI
wp queuety workflow replay <file>
| Alternativ | Beskrivning |
|---|---|
<file> |
Sökväg till den exporterade filen JSON (krävs) |
wp queuety workflow replay /tmp/workflow-42.json
# Success: Workflow replayed. New workflow ID: 85.
Strukturen hos JSON
Exporten innehåller hela arbetsflödestillståndet, tillhörande jobb, spårningshändelser, loggposter, lagrade signaler, artefakter, delar och eventuella väntposter för arbetsflödesberoenden:
{
"workflow": {
"id": 42,
"name": "generate_report",
"status": "failed",
"state": { "user_id": 1, "_steps": [...], "_queue": "default" },
"current_step": 2,
"total_steps": 4,
"parent_workflow_id": null,
"parent_step_index": null,
"started_at": "2026-03-28 10:00:00",
"completed_at": null,
"failed_at": "2026-03-28 10:05:00",
"error_message": "API timeout",
"deadline_at": null
},
"jobs": [
{
"id": 100,
"queue": "default",
"handler": "App\\Handlers\\FetchDataHandler",
"payload": {},
"status": "completed",
"attempts": 1,
"max_attempts": 3,
"step_index": 0
}
],
"events": [
{
"id": 1,
"job_id": 100,
"step_index": 0,
"step_name": "fetchData",
"step_type": "single",
"handler": "App\\Handlers\\FetchDataHandler",
"event": "step_completed",
"input": { "user_id": 1 },
"output": { "records": 150 },
"state_before": { "user_id": 1 },
"state_after": { "user_id": 1, "records": 150 },
"context": { "source": "api" },
"error": null,
"duration_ms": 230,
"created_at": "2026-03-28 10:00:01"
}
],
"logs": [
{
"id": 1,
"event": "workflow_started",
"handler": "generate_report",
"created_at": "2026-03-28 10:00:00"
}
],
"signals": [],
"artifacts": [],
"chunks": [],
"wait_dependencies": [],
"exported_at": "2026-03-28T12:00:00+00:00",
"queuety_version": "0.22.0"
}
Vissa fält är förkortade i exemplet ovan. Den faktiska exporten innehåller alla spårningskolumner från varje händelserad.
Arbetsflödesexporter bevarar också metadata som definition_version, definition_hash och idempotency_key när dessa angavs vid den ursprungliga körningen.
Så fungerar uppspelning
När du spelar upp ett exporterat arbetsflöde igen:
- En ny arbetsflödesrad skapas med det exporterade tillståndet och stegdefinitionerna
- Det nya arbetsflödets namn är
{original_name}_replay_{timestamp} - Historiska arbetsflödeshändelser och loggar läggs in igen i den nya miljön
- Lagrade signaler och beroenderader för väntande arbetsflöden spelas upp som historiskt tillstånd
- Om det ursprungliga arbetsflödet fortfarande var
runningköas det aktuella steget för bearbetning. Repeat- ochstart_workflows()-steg köas inte igen, så en uppspelning som stannar vid ett sådant steg förblirrunningutan jobb (#17) - Om det ursprungliga arbetsflödet hade statusen
waiting_for_signal,waiting_for_workflows,paused,failed,cancelledellercompletedbevaras den statusen i det återuppspelade arbetsflödet
Det återuppspelade arbetsflödet får ett nytt ID och körs oberoende. Det påverkar inte originalet.
Vid waiting_for_workflows-uppspelningar återskapas de exporterade beroenderaderna med samma arbetsflödes-ID:n. Det är användbart för granskning och för miljöer där dessa beroendearbetsflöden också finns, men beroende-ID:n mappas inte automatiskt om mellan miljöer.
Användningsområden
Återskapa produktionsfel
Exportera ett arbetsflöde som misslyckades i produktion och spela upp det igen lokalt:
# On production
wp queuety workflow export 42 --output=/tmp/workflow-42.json
# Copy the file to your local environment
# On local
wp queuety workflow replay /tmp/workflow-42.json
Det återuppspelade arbetsflödet har exakt samma tillstånd och stegdefinitioner. Pågående arbetsflöden köar det aktuella steget igen så att du kan fortsätta körningen där den avbröts, medan pausade eller väntande arbetsflöden återskapas i det blockerade tillståndet för granskning.
Flytta arbetsflöden mellan miljöer
Flytta ett arbetsflöde från staging till produktion, eller tvärtom, genom att exportera och spela upp det igen:
# On staging
wp queuety workflow export 15 --output=workflow.json
# On production
wp queuety workflow replay workflow.json
Granskning och arkivering
Exportera slutförda arbetsflöden för långtidslagring eller efterlevnad. Filen JSON innehåller hela körningshistoriken, inklusive indata, utdata, tillstånd före och efter, tidsuppgifter och felinformation.
$data = Queuety::export_workflow( $workflow_id );
// Store $data in your archive system, S3, etc.