Eksportowanie i odtwarzanie przepływu pracy
Queuety może eksportować pełną historię wykonania przepływu pracy do przenośnego formatu JSON i odtwarzać ją w innym środowisku. Przydaje się to do lokalnego odtwarzania błędów z produkcji, przenoszenia przepływów między środowiskami i przeprowadzania audytów.
Eksportowanie przepływu pracy
PHP API
Wywołaj Queuety::export_workflow() z identyfikatorem przepływu pracy. Zwraca tablicę możliwą do serializacji do JSON:
use Queuety\Queuety;
$data = Queuety::export_workflow( $workflow_id );
Aby bezpośrednio uzyskać ciąg JSON:
$json = json_encode( $data, JSON_PRETTY_PRINT );
file_put_contents( '/tmp/workflow-42.json', $json );
CLI
wp queuety workflow export <id> [--output=<file>]
| Opcja | Opis |
|---|---|
<id> |
Ścieżka pliku, do którego zapisać JSON. Domyślnie: standardowe wyjście. |
--output=<file> |
# Print to stdout
wp queuety workflow export 42
# Write to a file
wp queuety workflow export 42 --output=/tmp/workflow-42.json
Odtwarzanie przepływu pracy
PHP API
Wywołaj Queuety::replay_workflow() z danymi eksportu. Zwraca nowy identyfikator przepływu pracy:
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>
| Opcja | Opis |
|---|---|
<file> |
Ścieżka do wyeksportowanego pliku JSON (wymagana) |
wp queuety workflow replay /tmp/workflow-42.json
# Success: Workflow replayed. New workflow ID: 85.
Struktura JSON
Eksport zawiera pełny stan przepływu pracy, powiązane zadania, zdarzenia śladu, wpisy dziennika, zapisane sygnały, artefakty, fragmenty i wszystkie wiersze oczekiwania na zależności przepływów pracy:
{
"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"
}
Niektóre pola w powyższym przykładzie zostały skrócone. Rzeczywisty eksport zawiera wszystkie kolumny śladu z każdego wiersza zdarzenia.
Eksporty przepływów pracy zachowują także metadane, takie jak definition_version, definition_hash i idempotency_key, jeśli zostały ustawione podczas pierwotnego przebiegu.
Jak działa odtwarzanie
Podczas odtwarzania wyeksportowanego przepływu pracy:
- Tworzony jest nowy wiersz przepływu pracy z wyeksportowanym stanem i definicjami kroków
- Nazwa nowego przepływu pracy to
{original_name}_replay_{timestamp} - Historyczne zdarzenia i wpisy dziennika przepływu pracy są ponownie wstawiane w nowym środowisku
- Zapisane sygnały i wiersze zależności oczekiwania są odtwarzane jako stan historyczny
- Jeśli pierwotny przepływ pracy nadal miał status
running, bieżący krok jest umieszczany w kolejce do przetworzenia. Kroki powtarzania istart_workflows()nie są ponownie umieszczane w kolejce, więc odtworzenie zatrzymane na jednym z nich pozostaje w stanierunningbez zadania (#17) - Jeśli pierwotny przepływ pracy miał status
waiting_for_signal,waiting_for_workflows,paused,failed,cancelledlubcompleted, status ten zostaje zachowany w odtworzonym przepływie pracy
Odtworzony przepływ pracy otrzymuje nowy identyfikator i działa niezależnie. Nie wpływa na oryginał.
W przypadku odtworzeń waiting_for_workflows wyeksportowane wiersze zależności są odtwarzane z tymi samymi identyfikatorami przepływów pracy. Przydaje się to podczas audytu i w środowiskach, w których istnieją również te zależne przepływy, ale identyfikatory zależności nie są automatycznie mapowane między środowiskami.
Zastosowania
Odtwarzanie błędów z produkcji
Wyeksportuj nieudany przepływ pracy z produkcji i odtwórz go lokalnie:
# 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
Odtworzony przepływ pracy ma dokładnie ten sam stan i definicje kroków. Działające przepływy ponownie umieszczają bieżący krok w kolejce, dzięki czemu można wznowić wykonanie od miejsca, w którym zostało przerwane. Wstrzymane lub oczekujące przepływy są odtwarzane w tym zablokowanym stanie na potrzeby inspekcji.
Przenoszenie przepływów pracy między środowiskami
Przenieś przepływ pracy ze środowiska testowego do produkcyjnego (lub odwrotnie), eksportując i odtwarzając go:
# On staging
wp queuety workflow export 15 --output=workflow.json
# On production
wp queuety workflow replay workflow.json
Audytowanie i archiwizacja
Eksportuj ukończone przepływy pracy do długoterminowego przechowywania lub na potrzeby zgodności. Plik JSON zawiera pełną historię wykonania, w tym dane wejściowe, wyjściowe, stan przed i po, informacje o czasie oraz szczegóły błędów.
$data = Queuety::export_workflow( $workflow_id );
// Store $data in your archive system, S3, etc.