Állapotritkítás
Ahogy egy munkafolyamat sok lépésen halad át, a felhalmozott állapot mérete megnőhet. Az állapotritkítás automatikusan eltávolítja a régi lépések kimeneteit, hogy az állapot JSON korlátozott méretű maradjon, miközben megőrzi a fontos adatokat.
Állapotritkítás engedélyezése
Hívd meg a prune_state_after() metódust a munkafolyamat-építőn. Az argumentum a megőrzendő legutóbbi lépések számát adja meg:
use Queuety\Queuety;
Queuety::workflow( 'long_pipeline' )
->then( StepA::class )
->then( StepB::class )
->then( StepC::class )
->then( StepD::class )
->then( StepE::class )
->prune_state_after( 2 )
->dispatch( [ 'input' => $data ] );
A prune_state_after( 2 ) beállítással a D lépés befejeződése után az A és B lépés kimenetei eltávolításra kerülnek az állapotból. A C és D lépés (a két legutóbbi) megmarad.
A ritkítás működése
Ha az állapotritkítás engedélyezve van, a Queuety egy fenntartott _step_outputs tömbben követi, hogy az egyes lépések mely kulcsokat adják hozzá az állapothoz. A következő lépésre lépés után eltávolítja a küszöbnél régebbi lépések által bevezetett kulcsokat.
Például prune_state_after( 2 ) esetén:
After step 0 (StepA): state has keys from StepA + initial payload
After step 1 (StepB): state has keys from StepA + StepB + initial payload
After step 2 (StepC): state has keys from StepA + StepB + StepC + initial payload
-> prune: StepA output removed (only 2 most recent kept)
After step 3 (StepD): state has keys from StepB + StepC + StepD + initial payload
-> prune: StepB output removed
Mi marad meg
A Queuety soha nem ritkítja azokat a fenntartott kulcsokat, amelyek _ karakterekkel kezdődnek, például: _steps, _queue, _priority, _max_attempts, _on_cancel, _prune_state_after és _step_outputs. A dispatch() számára átadott kezdeti payloadkulcsok is megmaradnak, mert eleve nem követi őket lépéskimenetként. Emellett a Queuety a beállított küszöb szerint megőrzi az N legutóbbi lépés kimenetét.
Mikor használja
Az állapotritkítás olyan soklépéses munkafolyamatoknál hasznos, amelyekben az egyes lépések olyan adatokat állítanak elő, amelyekre a későbbi lépéseknek valójában nincs szükségük. Tipikus példa erre a hosszú folyamatlánc, ahol minden lépésnek csak az előző egy vagy két kimenetére van szüksége, a terjedelmes köztes struktúrákat létrehozó ETL-munkafolyamatok, valamint az egyébként ismétlődő állapotot felhalmozó rekurzív vagy ismétlődő munkafolyamatok. Ha a munkafolyamatod csak néhány lépésből áll, vagy a későbbi lépéseknek továbbra is szükségük van a korai kimenetekre, valószínűleg egyáltalán nincs szükséged ritkításra.
Alapértelmezett működés
Az állapotritkítás alapértelmezés szerint ki van kapcsolva. A prune_state_after() metódus egész számú argumentumot fogad. Argumentum nélkül meghívva az alapértelmezett érték 2:
->prune_state_after() // keeps the 2 most recent step outputs
->prune_state_after( 5 ) // keeps the 5 most recent step outputs