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
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_postjoprojām ir sākotnējais WordPress notikumsmappārvērš neapstrādātus āķa argumentus vienkāršā darbplūsmas stāvoklīwhenizlaiž nevēlamus notikumus, pirms tie tiek ievietoti rindāidempotency_keynepieļ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:
whenmapidempotency_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():
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:
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:
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ā:
$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.