Darbo sekų paleidimas
Darbo seka gali paleisti antrinę darbo seką kaip vieną iš savo veiksmų. Pirminė darbo seka pristabdoma, kol baigiama antrinė, tada jos galutinė būsena sujungiama su pirminės darbo sekos būsena.
Metodas ->run_workflow()
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' ] );
Metodas run_workflow() priima du argumentus:
- Darbo sekos paleidimo pavadinimą
WorkflowBuilderegzempliorių, apibrėžiantį darbo sekos veiksmus
Kaip tai veikia
Kai pirminė darbo seka pasiekia veiksmą run_workflow:
- Darbo seka paleidžiama kaip nepriklausoma seka su atskiru ID
- Pirminė darbo seka pristabdoma
- Antrinė darbo seka įprastai vykdo savo veiksmus
- Baigus antrinę darbo seką, jos galutinė būsena sujungiama su pirminės būsena
- Pirminė darbo seka tęsiama nuo kito veiksmo
Pirminės ir antrinės darbo sekų būsenos
Paleidžiama antrinė darbo seka kaip pradinį duomenų rinkinį gauna dabartinę sukauptą pirminės darbo sekos būseną. Todėl antriniai veiksmai gali pasiekti visus ankstesnių pirminės sekos veiksmų sugeneruotus duomenis:
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 [];
}
}
Būsenų sujungimas
Baigus antrinę darbo seką, jos galutinė būsena (išskyrus vidinius raktus, tokius kaip _steps, _queue, _priority, _max_attempts) sujungiama su pirminės darbo sekos būsena. Kitas pirminės sekos veiksmas mato visus ankstesnių pirminės sekos veiksmų ir antrinės darbo sekos duomenis:
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 [];
}
}
Darbo sekos paleidimo parinktys
Darbo sekos paleidimo kūrimo priemonės parinktys on_queue(), with_priority() ir max_attempts() taikomos antrinei darbo sekai. Kitos antrinės kūrimo priemonės darbo sekos lygmens parinktys, pavyzdžiui, on_cancel(), prune_state_after(), must_complete_within(), version(), idempotency_key(), max_*() biudžetai ir compensate_on_failure(), nepaveldimos:
$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 );
Įdėtos darbo sekos
Pačiose darbo sekose gali būti paleidžiamos kitos darbo sekos, todėl galima kurti bet kokio gylio įdėtines struktūras:
$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 );