Afhængigheder mellem arbejdsgange
Brug ventepunkter for afhængigheder mellem arbejdsgange, når én overordnet arbejdsgang først skal fortsætte, efter andre arbejdsgange er afsluttet. Det giver koordinering på tværs af arbejdsgange uden at tvinge alt ind i én enorm arbejdsgangsdefinition.
Disse ventepunkter fungerer særligt godt sammen med Async Handoffs, hvor én arbejdsgang først starter uafhængige underordnede arbejdsgange og derefter venter på dem.
Se Agent Orchestration for mere udførlige eksempler på planlægger og udfører.
Queuety indeholder tre builder-metoder:
wait_for_workflow()til én arbejdsgangwait_for_workflows()til flere arbejdsgange med semantik af typenall,anyellerquorumwait_for_workflow_group()når arbejdsgangs-ID'erne kommer fra en tidligere startet gruppe
Vent på én arbejdsgang
$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();
Når research_run afsluttes, genoptages editorial_run. Når result_key er angivet, gemmes den afsluttede afhængighedstilstand under den nøgle:
$state['research']; // public state from the completed research workflow
Uden en result_key flettes afhængighedsarbejdsgangens offentlige tilstand ind i den ventende arbejdsgangs tilstand på øverste niveau.
Vent på flere arbejdsgange
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::Allgenoptages først, når alle anførte workflows er fuldført.WaitMode::Anygenoptages, når det første anførte workflow er fuldført.WaitMode::Quorumgenoptages, når det krævede antal workflows er fuldført uden fejl.
Queuety::workflow( 'synthesis_run' )
->wait_for_workflows(
[ $research_id, $editorial_id, $legal_id ],
WaitMode::Quorum,
'dependencies',
quorum: 2,
)
->then( PublishPacketStep::class )
->dispatch();
Med result_key gemmes afsluttede afhængigheder ved ventetid på flere workflows med workflow-ID som nøgle:
[
'42' => [ 'summary' => '...' ],
'43' => [ 'summary' => '...' ],
]
Uden result_key flettes tilstanden for afsluttede afhængigheder ind i det ventende workflows topniveau i afhængighedernes rækkefølge.
Find afhængigheds-ID'er fra workflowtilstanden
Du kan vente med at angive afhængighedslisten til kørselstidspunktet ved at hente workflow-ID'er fra den offentlige tilstand:
Queuety::workflow( 'agent_follow_up' )
->wait_for_workflow( 'parent_workflow_id', 'parent' )
->then( FinalizeAgentRunStep::class )
->dispatch( [ 'parent_workflow_id' => $workflow_id ] );
For flere afhængigheder:
Queuety::workflow( 'aggregator' )
->wait_for_workflows( 'dependency_ids', WaitMode::Any, 'winner' )
->dispatch( [ 'dependency_ids' => [ 12, 18, 22 ] ] );
Vent på en startet workflowgruppe
Hvis et tidligere trin start_workflows() eller start_agents() gemte en permanent gruppenøgle, kan du vente direkte på gruppen i stedet for selv at føre workflow-ID'er gennem den offentlige tilstand.
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();
Hvad sker der, mens workflowet venter
Når et workflow når et af disse trin, sættes det i status waiting_for_workflows. Ingen worker er knyttet til det, mens det venter.
$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']
Hvis en afhængighed allerede er fuldført, før ventetrinnet nås, fortsætter workflowet med det samme.
Håndtering af fejl
Ventetrin for workflowafhængigheder er baseret på succes:
wait_for_workflow()ogWaitMode::Allfejler, hvis en påkrævet afhængighed fejler eller annulleres.WaitMode::Anyfejler kun, når alle afhængigheder har nået en terminal tilstand, og ingen er fuldført uden fejl.WaitMode::Quorumfejler, når de resterende aktive workflows ikke længere kan opfylde det krævede quorum.
Det gør ventetrin nyttige i planner/executor-systemer, hvor et workflow kan udføre arbejde, mens et andet venter på resultater fra all eller på den første succesfulde gren, der afsluttes.