Darbplūsmu palaišana
Darbplūsma vienā no savām darbībām var palaist pakārtotu darbplūsmu. Vecākdarbplūsma tiek apturēta, līdz pakārtotā darbplūsma ir pabeigta, un pēc tam tās beigu stāvoklis tiek apvienots ar vecākdarbplūsmas stāvokli.
Metode ->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' ] );
Metode run_workflow() pieņem divus argumentus:
- Darbplūsmas palaišanas nosaukumu
WorkflowBuilderinstanci, kas definē darbplūsmas palaišanas darbības
Kā tas darbojas
Kad vecākdarbplūsma sasniedz run_workflow darbību:
- Darbplūsma tiek palaista kā neatkarīga darbplūsma ar savu ID
- Vecākdarbplūsma tiek apturēta
- Pakārtotā darbplūsma parasti izpilda visas savas darbības
- Kad pakārtotā darbplūsma ir pabeigta, tās beigu stāvoklis tiek apvienots ar vecākdarbplūsmas stāvokli
- Vecākdarbplūsma turpina izpildi ar nākamo darbību
Vecāk- un pakārtotās darbplūsmas stāvoklis
Pakārtotā darbplūsma sākotnējā datu paketē saņem vecākdarbplūsmas pašreizējo uzkrāto stāvokli. Tādējādi pakārtotās darbības var piekļūt datiem, ko izveidojušas iepriekšējās vecāka darbības:
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 [];
}
}
Stāvokļu sapludināšana
Kad pakārtotā darbplūsma ir pabeigta, tās beigu stāvoklis (izņemot iekšējās atslēgas, piemēram, _steps, _queue, _priority, _max_attempts) tiek apvienots ar vecākdarbplūsmas stāvokli. Nākamā vecāka darbība redz datus gan no iepriekšējām vecāka darbībām, gan no pakārtotās darbplūsmas:
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 [];
}
}
Darbplūsmas palaišanas opcijas
Darbplūsmas palaišanas veidotāja opcijas on_queue(), with_priority() un max_attempts() attiecas uz pakārtoto darbplūsmu. Citas darbplūsmas līmeņa opcijas pakārtotajā veidotājā, piemēram, on_cancel(), prune_state_after(), must_complete_within(), version(), idempotency_key(), max_*() budžeti un compensate_on_failure(), netiek pārnestas:
$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 );
Ligzdotas darbplūsmas palaišanas
Darbplūsmās var būt iekļautas citas darbplūsmas, tādējādi pieļaujot jebkādu ligzdošanas dziļumu:
$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 );