Työnkulkujen riippuvuudet
Käytä työnkulkujen riippuvuusodotuksia, kun ylätason työnkulun tulisi jatkua vasta muiden työnkulkujen valmistuttua. Näin voit koordinoida työnkulkuja pakottamatta kaikkea yhteen suureen työnkulun määritelmään.
Nämä odotukset sopivat erityisen hyvin yhteen Async Handoffs-toiminnon kanssa, jossa yksi työnkulku käynnistää ensin itsenäiset alityönkulut ja odottaa niitä myöhemmin.
Katso kattavammat suunnittelija/suorittaja-esimerkit kohdasta Agent Orchestration.
Queuety tarjoaa kolme rakentajametodia:
wait_for_workflow()yhdelle työnkulullewait_for_workflows()useille työnkuluille, joidenall-,any- taiquorum-semantiikkaa käytetäänwait_for_workflow_group(), kun työnkulkujen tunnukset saadaan aiemmin käynnistetystä ryhmästä
Odota yhtä työnkulkua
$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();
Kun research_run valmistuu, editorial_run jatkaa. Kun result_key on asetettu, valmistuneen riippuvuuden tila tallennetaan kyseisen avaimen alle:
$state['research']; // public state from the completed research workflow
Ilman result_key-arvoa riippuvuustyönkulun julkinen tila yhdistetään odottavan työnkulun ylimmän tason tilaan.
Odota useita työnkulkuja
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::Alljatkaa vasta, kun kaikki luetellut työnkulut ovat valmistuneet.WaitMode::Anyjatkaa, kun ensimmäinen luetelluista työnkuluista valmistuu.WaitMode::Quorumjatkaa, kun vaadittu määrä työnkulkuja on valmistunut onnistuneesti.
Queuety::workflow( 'synthesis_run' )
->wait_for_workflows(
[ $research_id, $editorial_id, $legal_id ],
WaitMode::Quorum,
'dependencies',
quorum: 2,
)
->then( PublishPacketStep::class )
->dispatch();
Kun result_key on käytössä, usean työnkulun odotuksissa valmistuneiden riippuvuuksien tila tallennetaan työnkulun tunnuksen mukaan:
[
'42' => [ 'summary' => '...' ],
'43' => [ 'summary' => '...' ],
]
Ilman result_key-arvoa valmistuneiden riippuvuuksien tila yhdistetään odottavan työnkulun ylimmän tason tilaan riippuvuusjärjestyksessä.
Riippuvuustunnusten ratkaiseminen työnkulun tilasta
Voit lykätä riippuvuusluettelon muodostamista suoritusaikaan lukemalla työnkulkujen tunnukset julkisesta tilasta:
Queuety::workflow( 'agent_follow_up' )
->wait_for_workflow( 'parent_workflow_id', 'parent' )
->then( FinalizeAgentRunStep::class )
->dispatch( [ 'parent_workflow_id' => $workflow_id ] );
Useita riippuvuuksia varten:
Queuety::workflow( 'aggregator' )
->wait_for_workflows( 'dependency_ids', WaitMode::Any, 'winner' )
->dispatch( [ 'dependency_ids' => [ 12, 18, 22 ] ] );
Odota käynnistettyä työnkulkuryhmää
Jos aiempi start_workflows()- tai start_agents()-vaihe tallensi pysyvän ryhmäavaimen, voit odottaa suoraan kyseistä ryhmää sen sijaan, että välittäisit työnkulkujen tunnukset itse julkisen tilan kautta.
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();
Mitä odotuksen aikana tapahtuu
Kun työnkulku saavuttaa jonkin näistä vaiheista, sen tilaksi tulee waiting_for_workflows. Mikään työntekijä ei pysy siihen liitettynä odotuksen aikana.
$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']
Jos riippuvuus on jo valmistunut ennen odotusvaiheen saavuttamista, työnkulku jatkuu heti.
Virhetilanteiden semantiikka
Työnkulun riippuvuusodotukset painottavat onnistumista:
wait_for_workflow()jaWaitMode::Allepäonnistuvat, jos jokin vaadittu riippuvuus epäonnistuu tai peruutetaan.WaitMode::Anyepäonnistuu vain, kun kaikki riippuvuudet ovat päättyneet eikä yksikään valmistunut onnistuneesti.WaitMode::Quorumepäonnistuu, kun jäljellä olevat aktiiviset työnkulut eivät enää voi saavuttaa vaadittua päätösvaltaisuutta.
Näin työnkulkujen odotukset soveltuvat suunnittelija/suorittaja-järjestelmiin, joissa yksi työnkulku voi luoda kunkin työn ja toinen odottaa all-tuloksia tai ensimmäistä valmistuvaa onnistunutta haaraa.