Munkafolyamat-korlátok
Az ügynökszerű munkafolyamatok rugalmasak, de könnyebb velük duplikált futásokat létrehozni, vagy hagyni, hogy egy tervező a szándékoltnál több munkát állítson elő. A Queuety könnyű súlyú korlátokat biztosít munkafolyamat-szinten, így a rugalmasság megőrzése mellett is kézben tarthatja a folyamatot.
A dolgozók felvételét és a feladatonkénti költségmetaadatokat érintő tágabb erőforrásmodellről a Erőforrás-kezelés oldalon olvashat.
Munkafolyamat-definíció verziózása
A version() segítségével alkalmazásszintű verziócímkét rendelhet egy munkafolyamat-definícióhoz:
Queuety::workflow( 'research_run' )
->version( 'research.v2' )
->then( PlanResearchStep::class )
->then( DraftResearchSummaryStep::class )
->dispatch();
A verzió a munkafolyamat állapotával együtt tárolódik, a workflow_status() segítségével érhető el, a wp queuety workflow status megjeleníti, és a munkafolyamat-exportok is tartalmazzák.
A Queuety minden munkafolyamat-futáshoz determinisztikus definition_hash értéket is tárol. A hash a szerializált munkafolyamat-definícióból származik, és segít pontosan azonosítani, hogy egy telepítés után melyik munkafolyamat-formát hajtja végre a folyamatban lévő futás.
Indítás idempotenssé tétele
Használja a idempotency_key() elemet, ha a hívók újrapróbálhatják ugyanazt a kérést:
Queuety::workflow( 'research_run' )
->idempotency_key( 'brief:42:research' )
->then( PlanResearchStep::class )
->dispatch( [ 'brief_id' => 42 ] );
Ha egy munkafolyamatot olyan kulccsal indítanak újra, amelyet már használtak, a Queuety az eredeti munkafolyamat-azonosítót adja vissza új futás létrehozása helyett. A kulcsok minden munkafolyamatnév között globálisak, ezért vegye bele a munkafolyamat nevét is, ha különböző munkafolyamatoknál előfordulhat ugyanaz a kulcs.
Ez különösen hasznos a következőknél:
- API végpontok, amelyeket az ügyfelek vagy átjárók újrapróbálhatnak
- webhook-fogyasztók, amelyek duplikált kézbesítéseket kaphatnak
- tervezőlépések, amelyek külső entitásonként csak egy vezénylési futást hozhatnak létre
Az idempotenciakulcsok a queuety_workflow_dispatch_keys táblában tárolódnak.
Munkafolyamat-keretek beállítása
A tervezett keret túllépése esetén a futás meghiúsításához használjon munkafolyamat-kereteket:
Queuety::workflow( 'research_run' )
->max_transitions( 20 )
->max_for_each_items( 12 )
->max_state_bytes( 32768 )
->max_cost_units( 40 )
->max_started_workflows( 8 )
->then( PlanResearchStep::class )
->for_each( 'tasks', ExecuteResearchTask::class, 'results' )
->dispatch();
max_transitions()
Korlátozza, hány munkafolyamat-lépés fejeződhet be a futás meghiúsulása előtt. Ez hasznos olyan munkafolyamatok védelmére, amelyek dinamikusan ágaznak el, vagy a _next_step segítségével ugyanazt a részt újra elérhetik.
max_for_each_items()
Korlátozza, hogy egyetlen for_each() lépés hány futásidőben felderített elemet bonthasson ki. Ez hasznos tervező/végrehajtó rendszereknél, ahol egy ügynök a szándékoltnál sokkal több ágmunkát deríthet fel.
max_state_bytes()
Korlátozza a nyilvános munkafolyamat-állapot kódolt méretét. Ez segít megakadályozni, hogy a hosszan futó munkafolyamatok nagy, nehezen vizsgálható, exportálható vagy újrapróbálható adatcsomagokká nőjenek.
max_cost_units()
Korlátozza a befejezett lépések által felhasznált költségegységek összegét. A költségegységeket a lépés- vagy feladat-metaadat adja, amelyet a Queuety old fel a munka sorba állításakor. A szokásos felhasználói munka alapértéke 1, a vezénylési helyőrzők, például a késleltetések és várakozások értéke 0, a kezelők pedig a config() vagy a feladat tulajdonságai révén magasabb pozitív értéket állíthatnak be. Csak egy lépésdefiníció cost_units eleme állíthat be 0 értéket.
Ez akkor hasznos, ha egy munkafolyamat ugyanazt a részt újra elérheti, vagy a for-each olyan költséges munkát végez, amelyet önmagában a lépésszám nem tükröz. Egy tervező, amely újra és újra egy költséges modellhívást indít, a max_transitions() kereten belül maradhat, miközben mégis túllépi a tervezett költségkeretet.
max_started_workflows()
Korlátozza, hogy egy futás hány legfelső szintű munkafolyamatot indíthat a start_workflows() vagy a start_agents() segítségével. A korlátot az alárendelt munkafolyamatok indítása előtt ellenőrzi, így a szülő meghiúsul anélkül, hogy részben létrehozna egy keretet túllépő csoportot.
Ha túllépik a költségkeretet, a Queuety azonnal meghiúsítja a munkafolyamatot, ahelyett hogy újrapróbálná a lépést. Egy kivétel van: ha a Queuety::signal() lezár egy várakozást, és az eredményül kapott átmenet túllépi a költségkeretet, a kivétel a signal() hívójához kerül, a jel beszúrása visszagörgetésre kerül, a munkafolyamat pedig tovább vár.
A korlátok megfigyelése
A munkafolyamat állapota a következőket teszi elérhetővé:
definition_versiondefinition_hashidempotency_keybudget
A budget adatcsomagja tartalmazza a beállított korlátokat és az aktuális használatot, beleértve a nyilvános állapot aktuális méretét bájtban.
Példa:
$state = Queuety::workflow_status( $workflow_id );
$state->definition_version; // 'research.v2'
$state->definition_hash; // '4c7a...'
$state->idempotency_key; // 'brief:42:research'
$state->budget; // [ 'max_transitions' => 20, ... ]