Aszinkron átadások
Akkor használja a(z) start_workflows() megoldást, ha egy munkafolyamatnak a felfedezett munkát önálló, legfelső szintű munkafolyamatoknak kell átadnia ahelyett, hogy mindent egyetlen futáson belül tartana.
Ha kifejezetten ügynökfutásokat modellez, a(z) start_agents() és wait_for_agents() szemantikai szinonimák, ügynökökre szabott alapértékekkel.
Nagyobb, elejétől végéig tartó példákért lásd az Ügynökök összehangolása oldalt.
Ez az ügynökökre szabott összehangolásnál hasznos:
- egy tervező-munkafolyamat futás közben feladatokat fedez fel
- minden feladatból saját, tartós munkafolyamat lesz
- a szülő ezeknek a munkafolyamat-azonosítóit tárolja az állapotban
- a szülő később megvárhatja a(z)
all,any,quorumértéket vagy egy elnevezett, elindított csoportot
A(z) ->start_workflows() metódus
use Queuety\Enums\WaitMode;
use Queuety\Queuety;
$agent_task = Queuety::workflow( 'agent_task' )
->then( ResearchTopicStep::class )
->then( SummarizeTopicStep::class );
Queuety::workflow( 'brief_research' )
->then( PlanTopicsStep::class )
->start_workflows(
items_key: 'topics',
workflow_builder: $agent_task,
result_key: 'child_workflow_ids',
group_key: 'researchers',
)
->wait_for_workflow_group( 'researchers', WaitMode::All, result_key: 'child_results' )
->then( SynthesizeBriefStep::class )
->dispatch( [ 'brief_id' => 42 ] );
A példában:
- A(z)
PlanTopicsSteptémák adattartalmának tömbjét írja a(z)$state['topics']helyre - A(z)
start_workflows()témánként elindít egyagent_taskmunkafolyamatot - Az elindított munkafolyamatok azonosítói a(z)
$state['child_workflow_ids']helyre kerülnek - A(z)
wait_for_workflow_group()szüneteltet, amíg az elindított csoport nem teljesíti a választott befejezési feltételt - A(z)
SynthesizeBriefStepa befejezett gyermekállapotokat a(z)$state['child_results']alatt kapja meg
Gyermek-adattartalmak
A(z) items_key minden eleme egy elindított munkafolyamat kezdeti adattartalmává válik.
Ha az elem tömb, a nyilvános kulcsai egyesülnek a gyermek adattartalmával:
[
[ 'topic' => 'pricing', 'source' => 'competitors' ],
[ 'topic' => 'reviews', 'source' => 'customers' ],
]
Ha az elem skalár, a(z) Queuety a(z) payload_key alatt tárolja:
->start_workflows(
items_key: 'topic_names',
workflow_builder: $agent_task,
payload_key: 'topic',
)
A szülő állapotának öröklése
Alapértelmezés szerint a(z) start_workflows() minden gyermek adattartalmába egyesíti a szülő munkafolyamat nyilvános állapotát.
Ez azt jelenti, hogy az olyan megosztott kontextusok, mint a(z) brief_id, account_id vagy campaign, automatikusan elérhetők minden elindított munkafolyamatban.
A(z) items_key forrás és a(z) result_key kimarad az öröklésből, így egyik gyermek sem kapja meg a teljes feladatlistát vagy a végső munkafolyamat-azonosítók tömbjét.
Állítsa be a(z) inherit_state: false értéket, ha azt szeretné, hogy minden gyermek csak a saját elemének adattartalmát kapja meg.
Miért ne a(z) run_workflow() megoldást?
A(z) run_workflow() szülő-gyermek kapcsolatot hoz létre, amelyben a szülő ennél a lépésnél várakozik a gyermek befejezéséig.
A(z) start_workflows() lazább kapcsolatot hoz létre:
- az elindított munkafolyamatok önálló, legfelső szintű munkafolyamatok
- mindegyik külön megvizsgálható, újrapróbálható vagy exportálható
- a szülő később dönti el, hogy vár-e rájuk, és hogyan
Ezért a(z) start_workflows() jobban illik az ügynökfeladatok aszinkron átadásához, míg a(z) run_workflow() jobb választás a munkafolyamat-fán belüli beágyazott összeállításhoz.
Későbbi várakozás
A(z) start_workflows() a Munkafolyamat-függőségek megoldással együtt használható:
use Queuety\Enums\WaitMode;
Queuety::workflow( 'review_board' )
->start_workflows( 'review_tasks', $review_task_workflow, 'review_workflow_ids' )
->wait_for_workflows( 'review_workflow_ids', WaitMode::Any, 'winner' )
->then( FinalizeDecisionStep::class )
->dispatch( $payload );
- A(z)
WaitMode::Allösszegyűjti az összes befejezett gyermekállapotot - A(z)
WaitMode::Anyaz első sikeres gyermek-munkafolyamat befejezésekor folytatódik
Így tervező/végrehajtó összehangolást valósíthat meg teljes, futás közben szerkeszthető DAG-motor nélkül.
Ügynökbarát aliasok
A(z) start_agents() a(z) start_workflows() egyik aliasa, tervező/végrehajtó folyamatokra hangolt alapértékekkel:
- A(z)
result_keyalapértelmezése:agent_workflow_ids - A(z)
payload_keyalapértelmezése:agent_task - A(z)
namealapértelmezése:start_agents
A(z) wait_for_agents() a(z) wait_for_workflows() egyik aliasa, az ügynökeredmények összegyűjtésére hangolt alapértékekkel:
- A(z)
workflowsalapértelmezése:agent_workflow_ids - A(z)
result_keyalapértelmezése:agent_results - A(z)
namealapértelmezése:wait_for_agents
A(z) wait_for_agent_group() a(z) wait_for_workflow_group() egyik aliasa, ügynökfeladat-kötegekhez hangolt alapértékekkel.
use Queuety\Enums\WaitMode;
$agent_run = Queuety::workflow( 'agent_run' )
->then( ResearchTopicStep::class )
->then( SummarizeTopicStep::class );
Queuety::workflow( 'brief_research' )
->then( PlanTopicsStep::class )
->start_agents( 'agent_tasks', $agent_run, group_key: 'researchers' )
->wait_for_agent_group( 'researchers', WaitMode::Quorum, 2 )
->then( SynthesizeBriefStep::class )
->dispatch( [ 'brief_id' => 42 ] );