İş Akışı Bağımlılıkları
Üst düzey bir iş akışının yalnızca diğer iş akışları tamamlandıktan sonra devam etmesi gerektiğinde, iş akışı bağımlılığı beklemelerini kullanın. Böylece her şeyi tek bir dev iş akışı tanımına sıkıştırmadan iş akışları arasında eşgüdüm sağlayabilirsiniz.
Bu beklemeler özellikle Eşzamansız Devretmeler ile iyi çalışır; bu düzende bir iş akışı önce bağımsız alt iş akışlarını başlatır, ardından onları bekler.
Daha kapsamlı planlayıcı/yürütücü örnekleri için bkz. Aracı Düzenleme.
Queuety üç oluşturucu yöntemi sunar:
wait_for_workflow()tek bir iş akışı içinwait_for_workflows(),all,anyveyaquorumanlamlarıyla birden çok iş akışı için- İş akışı kimlikleri daha önce başlatılmış bir gruptan geldiğinde
wait_for_workflow_group()
Tek bir iş akışını bekleme
$research_id = Queuety::workflow( 'research_run' )
->then( PlanResearchStep::class )
->for_each( 'tasks', ExecuteResearchTask::class, 'results' )
->dispatch( [ 'brief_id' => 42 ] );
$editorial_id = Queuety::workflow( 'editorial_run' )
->wait_for_workflow( $research_id, 'research' )
->then( DraftBriefStep::class )
->dispatch();
research_run tamamlandığında editorial_run devam eder. result_key ayarlanmışsa tamamlanan bağımlılığın durumu bu anahtar altında saklanır:
$state['research']; // public state from the completed research workflow
result_key olmadan, bağımlı iş akışının genel durumu bekleyen iş akışının üst düzey durumuyla birleştirilir.
Birden çok iş akışını bekleme
use Queuety\Enums\WaitMode;
Queuety::workflow( 'synthesis_run' )
->wait_for_workflows(
[ $research_id, $editorial_id, $legal_id ],
WaitMode::All,
'dependencies'
)
->then( PublishPacketStep::class )
->dispatch();
WaitMode::Allyalnızca listelenen tüm iş akışları tamamlandığında devam eder.WaitMode::Anylistelenen ilk iş akışı tamamlandığında devam eder.WaitMode::Quorumgerekli sayıda iş akışı başarıyla tamamlandığında devam eder.
Queuety::workflow( 'synthesis_run' )
->wait_for_workflows(
[ $research_id, $editorial_id, $legal_id ],
WaitMode::Quorum,
'dependencies',
quorum: 2,
)
->then( PublishPacketStep::class )
->dispatch();
result_key ile birden çok iş akışını beklerken tamamlanan bağımlılıkların durumu, iş akışı kimliğine göre anahtarlanarak saklanır:
[
'42' => [ 'summary' => '...' ],
'43' => [ 'summary' => '...' ],
]
result_key olmadan, tamamlanan bağımlılıkların durumu bağımlılık sırasına göre bekleyen iş akışının üst düzey durumuyla birleştirilir.
Bağımlılık kimliklerini iş akışı durumundan çözümleme
Bağımlılık listesini çalışma zamanına kadar erteleyip iş akışı kimliklerini genel durumdan okuyabilirsiniz:
Queuety::workflow( 'agent_follow_up' )
->wait_for_workflow( 'parent_workflow_id', 'parent' )
->then( FinalizeAgentRunStep::class )
->dispatch( [ 'parent_workflow_id' => $workflow_id ] );
Birden çok bağımlılık için:
Queuety::workflow( 'aggregator' )
->wait_for_workflows( 'dependency_ids', WaitMode::Any, 'winner' )
->dispatch( [ 'dependency_ids' => [ 12, 18, 22 ] ] );
Başlatılmış bir iş akışı grubunu bekleme
Önceki bir start_workflows() veya start_agents() adımı kalıcı bir grup anahtarı sakladıysa, iş akışı kimliklerini genel durum üzerinden kendiniz taşımak yerine doğrudan bu grubu bekleyebilirsiniz.
Queuety::workflow( 'brief_research' )
->then( PlanTopicsStep::class )
->start_agents( 'agent_tasks', $agent_run, group_key: 'researchers' )
->wait_for_agent_group( 'researchers', WaitMode::Quorum, 2, 'agent_results' )
->then( SynthesizeBriefStep::class )
->dispatch();
Bekleme sırasında ne olur
Bir iş akışı bu adımlardan birine ulaştığında durumu waiting_for_workflows olur. Beklediği sırada hiçbir çalışan ona bağlı kalmaz.
$state = Queuety::workflow_status( $workflow_id );
echo $state->status->value; // 'waiting_for_workflows'
echo $state->wait_type; // 'workflow'
print_r( $state->waiting_for ); // ['42', '43']
Bir bağımlılık, bekleme adımına ulaşılmadan önce tamamlanmışsa iş akışı hemen devam eder.
Hata semantiği
İş akışı bağımlılığı beklemeleri başarı odaklıdır:
wait_for_workflow()veWaitMode::All, gerekli bağımlılıklardan herhangi biri başarısız olur veya iptal edilirse başarısız olur.WaitMode::Anyyalnızca her bağımlılık terminal duruma ulaştığında ve hiçbiri başarıyla tamamlanmadığında başarısız olur.WaitMode::Quorum, etkin kalan iş akışları gerekli yeter sayıyı artık karşılayamayacak durumdaysa başarısız olur.
Bu sayede iş akışı beklemeleri, bir iş akışının her bir iş için görev dağıtabildiği ve diğerinin all sonuçlarını ya da tamamlanan ilk başarılı dalı bekleyebildiği planlayıcı/yürütücü sistemlerinde kullanışlıdır.