Pāriet uz saturu

Darbību palaidēji

Queuety::on_action() ļauj pārvērst parastu WordPress darbību par noturīgas darbplūsmas palaišanu.

Tas nodrošina skaidru savienojumu:

WordPress action -> mapped payload -> durable workflow

Tas noder, ja interesējošais notikums jau ir WordPress, bet dārgā vai ilgstošā reakcija jāveic asinhroni.

Piemērs: pārskatiet saturu, kad ziņa ir saglabāta

PHP
use Queuety\Queuety;

Queuety::on_action(
    'save_post',
    workflow: 'content_review',
    map: static fn ( int $post_id, object $post, bool $update ): array => [
        'post_id' => $post_id,
        'post_type' => $post->post_type,
        'update' => $update,
    ],
    when: static fn ( int $post_id, object $post ): bool => 'post' === $post->post_type,
    idempotency_key: static fn ( int $post_id ): string => "save_post:{$post_id}",
);

Šajā piemērā:

  • save_post joprojām ir sākotnējais WordPress notikums
  • map pārvērš neapstrādātus āķa argumentus vienkāršā darbplūsmas stāvoklī
  • when izlaiž nevēlamus notikumus, pirms tie tiek ievietoti rindā
  • idempotency_key nepieļauj, ka atkārtoti āķa izsaukumi palaiž dublētas izpildes

Kas darbojas sinhroni

Pati darbības atzvanīšanas funkcija joprojām darbojas pašreizējā WordPress pieprasījuma ietvaros.

Tas nozīmē, ka šīs daļas ir sinhronas:

  • when
  • map
  • idempotency_key

Tikai darbplūsmas darbības pēc palaišanas darbojas asinhroni.

Datu noteikumi

Kartētajos datos jābūt vienkāršiem masīviem, skalāriem un null.

Nenododiet neapstrādātus WordPress objektus, piemēram, WP_Post, tieši darbplūsmas stāvoklī. Vispirms normalizējiet tos ar map():

PHP
Queuety::on_action(
    'save_post',
    workflow: 'content_review',
    map: static fn ( int $post_id, object $post, bool $update ): array => [
        'post_id' => $post_id,
        'post_type' => $post->post_type,
        'post_status' => $post->post_status,
        'update' => $update,
    ],
);

Atslēgas, kas sākas ar _, tiek noraidītas, jo šie nosaukumi ir rezervēti iekšējam darbplūsmas stāvoklim.

Pieņemtie argumenti

Reģistrējot darbības atzvanīšanas funkciju, WordPress nepieciešams norādīt accepted_args skaitu.

Queuety to pēc noklusējuma nosaka pēc jūsu map, when un idempotency_key atzvanīšanas funkcijām, tāpēc parasti papildu konfigurācija nav vajadzīga:

PHP
Queuety::on_action(
    'save_post',
    workflow: 'content_review',
    map: static fn ( int $post_id, object $post, bool $update ): array => [
        'post_id' => $post_id,
        'update' => $update,
    ],
);

Ja nepieciešama manuāla maiņa, skaidri norādiet accepted_args:

PHP
Queuety::on_action(
    'comment_post',
    workflow: 'comment_review',
    accepted_args: 2,
);

Darbplūsmu veidotāji kodā

Varat palaist reģistrētu darbplūsmas nosaukumu vai iekļautu WorkflowBuilder.

Iekļautie veidotāji noder, ja āķim paredzētā darbplūsma ir definēta tajā pašā sāknēšanas failā:

PHP
$review = Queuety::workflow( 'comment_review' )
    ->then( ModerateCommentStep::class )
    ->then( NotifyModeratorStep::class );

Queuety::on_action(
    'comment_post',
    workflow: $review,
    map: static fn ( int $comment_id ): array => [
        'comment_id' => $comment_id,
    ],
    idempotency_key: static fn ( int $comment_id ): string => "comment:{$comment_id}",
);

Kad šī pieeja ir piemērota

Izmantojiet darbību palaidējus, ja:

  • WordPress jau izsauc vajadzīgo notikumu
  • reakcijai jāspēj pārdzīvot pieprasījuma noildze vai izpildītāja restartēšana
  • turpmākais darbs var sazaroties, gaidīt vai prasīt apstiprinājumu
  • atkārtotu āķa izsaukumu gadījumā jānodrošina noturīga idempotence

Izsauciet Queuety::dispatch() vai Queuety::workflow() tieši, ja darbs nav saistīts ar WordPress notikuma robežu.

Neizmantot filtriem

Queuety::on_action() ir paredzēts tikai darbībām.

Filtri ir sinhronas transformācijas, kas notiek pieprasījuma apstrādes laikā. Parasti tiem jāpaliek sinhroniem, jo WordPress sagaida, ka filtrētā vērtība tiks atgriezta nekavējoties.