Ga naar de inhoud

Toestandsopschoning

Naarmate een workflow veel stappen doorloopt, kan de opgebouwde status flink groeien. Met toestandsopschoning worden oude stapuitvoerwaarden automatisch verwijderd om de status begrensd te houden met JSON, terwijl de belangrijke gegevens behouden blijven.

Toestandsopschoning inschakelen

Roep prune_state_after() aan op de workflowbuilder. Het argument is het aantal recente stappen waarvan de uitvoer moet worden bewaard:

PHP
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 ] );

Met prune_state_after( 2 ) worden na voltooiing van stap D de uitvoerwaarden van stap A en B uit de status verwijderd. Stap C en D (de twee meest recente) blijven behouden.

Hoe opschoning werkt

Wanneer toestandsopschoning is ingeschakeld, houdt Queuety bij welke sleutels elke stap aan de status toevoegt, in een gereserveerde array _step_outputs. Na de overgang naar een nieuwe stap worden alle sleutels verwijderd die zijn toegevoegd door stappen ouder dan de drempel.

Bijvoorbeeld, met prune_state_after( 2 ):

Code
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

Wat behouden blijft

Queuety verwijdert nooit gereserveerde sleutels die beginnen met _, zoals _steps, _queue, _priority, _max_attempts, _on_cancel, _prune_state_after en _step_outputs. Initiële payloadsleutels die aan dispatch() zijn doorgegeven, blijven ook behouden, omdat ze niet als stapuitvoer worden bijgehouden. Daarnaast bewaart Queuety de N meest recente stapuitvoerwaarden, volgens de drempel die u hebt ingesteld.

Wanneer gebruik je deze?

Toestandsopschoning is handig voor workflows met veel stappen waarbij elke stap gegevens oplevert die latere stappen niet echt nodig hebben. Veelvoorkomende voorbeelden zijn lange pipelines waarin elke stap alleen de uitvoer van de vorige één of twee stappen nodig heeft, ETL-workflows die omvangrijke tussenstructuren genereren, en recursieve of herhalende workflows die anders steeds meer herhaalde status zouden verzamelen. Als uw workflow maar een paar stappen heeft, of als latere stappen nog afhankelijk zijn van vroege uitvoerwaarden, hebt u waarschijnlijk helemaal geen opschoning nodig.

Standaardgedrag

Toestandsopschoning is standaard uitgeschakeld. De methode prune_state_after() accepteert een integerargument. Zonder argument is de standaardwaarde 2:

PHP
->prune_state_after()     // keeps the 2 most recent step outputs
->prune_state_after( 5 )  // keeps the 5 most recent step outputs