İş Akışını Dışa Aktarma ve Yeniden Oynatma
Queuety, bir iş akışının eksiksiz yürütme geçmişini taşınabilir bir JSON biçiminde dışa aktarabilir ve bunu farklı bir ortamda yeniden oynatabilir. Bu özellik, üretimdeki hataları yerel olarak yeniden oluşturmak, iş akışlarını ortamlar arasında taşımak ve denetim yapmak için kullanışlıdır.
İş akışını dışa aktarma
PHP API
İş akışı kimliğiyle Queuety::export_workflow() çağrısı yapın. JSON ile serileştirilebilen bir dizi döndürür:
use Queuety\Queuety;
$data = Queuety::export_workflow( $workflow_id );
Doğrudan bir JSON dizgesi almak için:
$json = json_encode( $data, JSON_PRETTY_PRINT );
file_put_contents( '/tmp/workflow-42.json', $json );
CLI
wp queuety workflow export <id> [--output=<file>]
| Seçenek | Açıklama |
|---|---|
<id> |
İş akışı kimliği (gerekli) |
--output=<file> |
JSON yazılacak dosya yolu. Varsayılan olarak stdout kullanılır. |
# Print to stdout
wp queuety workflow export 42
# Write to a file
wp queuety workflow export 42 --output=/tmp/workflow-42.json
İş akışını yeniden oynatma
PHP API
Dışa aktarılan verilerle Queuety::replay_workflow() çağrısı yapın. Yeni iş akışı kimliğini döndürür:
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>
| Seçenek | Açıklama |
|---|---|
<file> |
Dışa aktarılmış JSON dosyasının yolu (gerekli) |
wp queuety workflow replay /tmp/workflow-42.json
# Success: Workflow replayed. New workflow ID: 85.
JSON yapısı
Dışa aktarım; tüm iş akışı durumunu, ilişkili işleri, iz olaylarını, günlük girdilerini, saklanan sinyalleri, yapıtları, parçaları ve tüm iş akışı bağımlılığı bekleme satırlarını içerir:
{
"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"
}
Yukarıdaki örnekte bazı alanlar kısaltılmıştır. Gerçek dışa aktarım, her olay satırındaki tüm iz sütunlarını içerir.
İş akışı dışa aktarımları, özgün çalıştırmada ayarlanmışlarsa definition_version, definition_hash ve idempotency_key gibi iş akışı meta verilerini de korur.
Yeniden oynatma nasıl çalışır
Dışa aktarılmış bir iş akışını yeniden oynattığınızda:
- Dışa aktarılan durum ve adım tanımlarıyla yeni bir iş akışı satırı oluşturulur.
- Yeni iş akışının adı
{original_name}_replay_{timestamp}olur. - Geçmiş iş akışı olayları ve günlükleri yeni ortama yeniden eklenir.
- Saklanan sinyaller ve iş akışı bekleme bağımlılığı satırları geçmiş durum olarak yeniden oynatılır.
- Özgün iş akışı hâlâ
runningdurumundaysa geçerli adım işlenmek üzere kuyruğa alınır. Repeat vestart_workflows()adımları yeniden kuyruğa alınmaz; bu nedenle bunlardan birinde duran yeniden oynatma, iş olmadanrunningdurumunda kalır (#17). - Özgün iş akışı
waiting_for_signal,waiting_for_workflows,paused,failed,cancelledveyacompleteddurumundaysa, yeniden oynatılan iş akışında da bu durum korunur.
Yeniden oynatılan iş akışı yeni bir kimlik alır ve özgününden bağımsız çalışır. Özgün iş akışını etkilemez.
waiting_for_workflows yeniden oynatmalarında dışa aktarılan bağımlılık satırları aynı iş akışı kimlikleriyle yeniden oluşturulur. Bu, denetim ve söz konusu bağımlı iş akışlarının da bulunduğu ortamlar için kullanışlıdır; ancak bağımlılık kimliklerini ortamlar arasında otomatik olarak eşlemez.
Kullanım alanları
Üretim hatalarını yeniden oluşturma
Üretimdeki başarısız bir iş akışını dışa aktarın ve yerel ortamda yeniden oynatın:
# 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
Yeniden oynatılan iş akışı aynı duruma ve adım tanımlarına sahip olur. Çalışan iş akışlarında geçerli adım yeniden kuyruğa alınır; böylece kaldıkları noktadan yürütmeye devam edebilirsiniz. Duraklatılmış veya bekleyen iş akışları ise incelenmek üzere bu engellenmiş durumda yeniden oluşturulur.
İş akışlarını ortamlar arasında taşıma
Bir iş akışını dışa aktarıp yeniden oynatarak hazırlık ortamından üretime (veya tersine) taşıyın:
# On staging
wp queuety workflow export 15 --output=workflow.json
# On production
wp queuety workflow replay workflow.json
Denetim ve arşivleme
Tamamlanmış iş akışlarını uzun süreli depolama veya mevzuata uygunluk için dışa aktarın. JSON dosyası; girdiler, çıktılar, önceki ve sonraki durumlar, zamanlama verileri ve hata ayrıntıları dâhil tüm yürütme geçmişini içerir.
$data = Queuety::export_workflow( $workflow_id );
// Store $data in your archive system, S3, etc.