İçeriğe geç

İş 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:

PHP
use Queuety\Queuety;

$data = Queuety::export_workflow( $workflow_id );

Doğrudan bir JSON dizgesi almak için:

PHP
$json = json_encode( $data, JSON_PRETTY_PRINT );
file_put_contents( '/tmp/workflow-42.json', $json );

CLI

Kabuk
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.
Kabuk
# 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:

PHP
use Queuety\Queuety;

$json = file_get_contents( '/tmp/workflow-42.json' );
$data = json_decode( $json, true );

$new_id = Queuety::replay_workflow( $data );

CLI

Kabuk
wp queuety workflow replay <file>
Seçenek Açıklama
<file> Dışa aktarılmış JSON dosyasının yolu (gerekli)
Kabuk
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:

JSON
{
    "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:

  1. Dışa aktarılan durum ve adım tanımlarıyla yeni bir iş akışı satırı oluşturulur.
  2. Yeni iş akışının adı {original_name}_replay_{timestamp} olur.
  3. Geçmiş iş akışı olayları ve günlükleri yeni ortama yeniden eklenir.
  4. Saklanan sinyaller ve iş akışı bekleme bağımlılığı satırları geçmiş durum olarak yeniden oynatılır.
  5. Özgün iş akışı hâlâ running durumundaysa geçerli adım işlenmek üzere kuyruğa alınır. Repeat ve start_workflows() adımları yeniden kuyruğa alınmaz; bu nedenle bunlardan birinde duran yeniden oynatma, iş olmadan running durumunda kalır (#17).
  6. Özgün iş akışı waiting_for_signal, waiting_for_workflows, paused, failed, cancelled veya completed durumundaysa, 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:

Kabuk
# 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:

Kabuk
# 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.

PHP
$data = Queuety::export_workflow( $workflow_id );
// Store $data in your archive system, S3, etc.