Liigu sisu juurde

Käivita töövood

Töövoog saab käivitada alam töövoo ühe oma sammuna. Põhitöövoog peatub, kuni alam töövoog lõpetab, seejärel liidetakse alam töövoo lõplik olek põhitöövoo olekuga.

Meetod ->run_workflow()

PHP
use Queuety\Queuety;

$enrichment = Queuety::workflow( 'enrich_user' )
    ->then( FetchSocialHandler::class )
    ->then( FetchCreditScoreHandler::class );

Queuety::workflow( 'onboarding' )
    ->then( CreateAccountHandler::class )
    ->run_workflow( 'enrich_user', $enrichment )
    ->then( SendWelcomeEmailHandler::class )
    ->dispatch( [ 'email' => 'user@example.com' ] );

Meetod run_workflow() võtab kaks argumenti:

  1. Käivita töövoog toimingu nimi
  2. WorkflowBuilder eksemplar, mis määratleb käivita töövoog toimingu sammud

Kuidas see töötab

Kui põhitöövoog jõuab sammuni run_workflow:

  1. Käivita töövoog toiming saadetakse käima sõltumatu töövoona, millel on oma ID
  2. Põhitöövoog peatub
  3. Käivita töövoog toiming läbib tavapäraselt oma sammud
  4. Kui käivita töövoog toiming lõpetab, liidetakse selle lõplik olek põhitöövoo olekuga
  5. Põhitöövoog jätkub järgmise sammuga

Põhitöövoo ja alam töövoo olek

Käivita töövoog toiming saab algandmetena põhitöövoo praeguse koondoleku. See tähendab, et alam töövoo sammud pääsevad ligi kõigile andmetele, mille varasemad põhitöövoo sammud on loonud:

PHP
class CreateAccountHandler implements Step {
    public function handle( array $state ): array {
        $user_id = wp_create_user( $state['email'], wp_generate_password() );
        return [ 'user_id' => $user_id ];
    }

    public function config(): array {
        return [];
    }
}

// This run-workflow step can access 'user_id' from the parent
class FetchSocialHandler implements Step {
    public function handle( array $state ): array {
        $profile = fetch_social_profile( $state['user_id'] );
        return [ 'social_data' => $profile ];
    }

    public function config(): array {
        return [];
    }
}

Olekute liitmine

Kui käivita töövoog toiming lõpetab, liidetakse selle lõplik olek (välja arvatud sisemised võtmed, nagu _steps, _queue, _priority, _max_attempts) põhitöövoo olekuga. Järgmine põhitöövoo samm näeb nii põhitöövoo varasemate sammude kui ka käivita töövoog toimingu kõiki andmeid:

PHP
class SendWelcomeEmailHandler implements Step {
    public function handle( array $state ): array {
        // Has access to:
        // - $state['email'] (from initial dispatch)
        // - $state['user_id'] (from CreateAccountHandler)
        // - $state['social_data'] (from run-workflow's FetchSocialHandler)
        // - $state['credit_score'] (from run-workflow's FetchCreditScoreHandler)

        send_welcome_email( $state['email'], $state['social_data'] );
        return [ 'welcome_sent' => true ];
    }

    public function config(): array {
        return [];
    }
}

Käivita töövoog toimingu valikud

Alam töövoo koostaja on_queue(), with_priority() ja max_attempts() kehtivad alam töövoole. Teisi alam koostaja töövootaseme valikuid, näiteks on_cancel(), prune_state_after(), must_complete_within(), version(), idempotency_key(), max_*() eelarveid ja compensate_on_failure(), edasi ei kanta:

PHP
$sub = Queuety::workflow( 'heavy_processing' )
    ->on_queue( 'background' )
    ->with_priority( Priority::Normal )
    ->max_attempts( 5 )
    ->then( StepA::class )
    ->then( StepB::class );

Queuety::workflow( 'parent' )
    ->run_workflow( 'heavy', $sub )
    ->then( FinalStep::class )
    ->dispatch( $payload );

Pesastatud käivita töövoog toimingud

Käivita töövoog toimingud võivad ise sisaldada käivita töövoog toiminguid, võimaldades suvalist pesastamist:

PHP
$inner = Queuety::workflow( 'inner' )
    ->then( InnerStepA::class )
    ->then( InnerStepB::class );

$middle = Queuety::workflow( 'middle' )
    ->then( MiddleStepA::class )
    ->run_workflow( 'inner', $inner )
    ->then( MiddleStepB::class );

Queuety::workflow( 'outer' )
    ->then( OuterStepA::class )
    ->run_workflow( 'middle', $middle )
    ->then( OuterStepB::class )
    ->dispatch( $payload );