Tilstandsrensning
Efterhånden som et workflow gennemgår mange trin, kan den ophobede tilstand vokse sig stor. Tilstandsrensning fjerner automatisk gamle trinresultater for at holde tilstanden JSON begrænset, samtidig med at de vigtige data bevares.
Aktivér tilstandsrensning
Kald prune_state_after() på workflow-builderen. Argumentet er antallet af seneste trin, hvis output skal bevares:
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 ] );
Med prune_state_after( 2 ) fjernes outputtene fra trin A og B fra tilstanden, når trin D er færdigt. Trin C og D (de to seneste) bevares.
Sådan fungerer rensningen
Når tilstandsrensning er aktiveret, registrerer Queuety, hvilke nøgler hvert trin føjer til tilstanden, i et reserveret _step_outputs-array. Når der fortsættes til et nyt trin, fjernes alle nøgler, der blev tilføjet af trin, som ligger længere tilbage end grænsen.
For eksempel med prune_state_after( 2 ):
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
Hvad bevares
Queuety renser aldrig reserverede nøgler, der begynder med _, såsom _steps, _queue, _priority, _max_attempts, _on_cancel, _prune_state_after og _step_outputs. De oprindelige nyttelastnøgler, der sendes til dispatch(), bevares også, fordi de ikke registreres som trinoutput. Derudover bevarer Queuety de N seneste trinoutput i henhold til den konfigurerede grænse.
Hvornår skal den bruges
Tilstandsrensning er nyttig for workflows med mange trin, hvor hvert trin producerer data, som senere trin reelt ikke har brug for. Typiske eksempler er lange pipelines, hvor hvert trin kun behøver outputtet fra det foregående trin eller de to foregående trin, ETL-workflows, der genererer store mellemliggende datastrukturer, samt rekursive eller gentagne workflows, der ellers ville ophobe gentagen tilstand. Hvis dit workflow kun har få trin, eller hvis sene trin stadig afhænger af tidlige output, har du sandsynligvis slet ikke brug for rensning.
Standardadfærd
Tilstandsrensning er deaktiveret som standard. Metoden prune_state_after() tager et heltalsargument. Hvis den kaldes uden et argument, er standardværdien 2:
->prune_state_after() // keeps the 2 most recent step outputs
->prune_state_after( 5 ) // keeps the 5 most recent step outputs