Siirry sisältöön

Queuety

WordPress-työnkulkujärjestelmä.

Pääte
wp plugin install https://github.com/inline0/queuety/releases/latest/download/queuety.zip --activate

Uusin julkaisu v0.22.0 GPL-2.0-or-later WordPress 6.4+, PHP 8.2+

Käytännössä

Kohteessa PHP määritelty työnkulku ja sen suorittava työntekijäkomento.

Hyväksyntätyönkulku

Työnkulku suorittaa vaiheen, odottaa 24 tuntia ja jää sitten tauolle kohteessa wait_for_approval(), kunnes toinen prosessi lähettää approval-signaalin.

Viive tallennetaan tietokantaan, joten se säilyy työntekijän uudelleenkäynnistysten ja käyttöönottojen yli. Jos signaali lähetetään etuajassa, se kirjataan ja käsitellään, kun työnkulku saavuttaa odotuskohdan. Suorituksen peruminen kutsuu käsittelijää on_cancel().

PHP
$workflow_id = Queuety::workflow( 'approval_flow' )
    ->then( SubmitRequestHandler::class )
    ->delay( hours: 24 )
    ->wait_for_approval()
    ->then( ProcessApprovalHandler::class )
    ->on_cancel( CleanupHandler::class )
    ->dispatch( [ 'request_id' => 99 ] );

// Later, from another process:
Queuety::signal( $workflow_id, 'approval', [ 'approved_by' => 'admin@example.com' ] );

Suorat MySQL-varaukset

Jokainen työntekijä toimii pitkäikäisessä WP-CLI-prosessissa ja varaa työt suoraan kohteesta MySQL käyttämällä komentoa FOR UPDATE SKIP LOCKED.

Pysyvät työnkulut

Monivaiheiset prosessit ja pysyvä tila, joka säilyy PHP-aikakatkaisuista, kaatumisista ja uudelleenyrityksistä huolimatta.

Tilakoneet

Pitkäikäinen, tapahtumapohjainen tila kohteella Queuety::machine(): määritä tilat ja siirtymät, lähetä tapahtumia ja tarkastele aikajanaa.

Signaalit ja hyväksynnät

wait_for_signal(), wait_for_approval() ja wait_for_input() keskeyttävät työnkulun, kunnes ulkoinen syöte saapuu.

Prioriteettitasot

Neljä tasoa: pienestä kiireelliseen. Jonon sisällä korkeamman prioriteetin työt varataan ensin.

Nopeusrajoitukset

Käsittelijäkohtaiset rajat liukuvalla aikavälillä. Nopeusrajoitetun työn varaava työntekijä palauttaa sen jonoon ja odottaa.

Toistuvat työt

Aikaväli- ja cron-pohjainen ajoitus. Sisäänrakennettu cron-jäsennin ilman ulkoisia riippuvuuksia.

Rinnakkaiset vaiheet

Suorita työnkulun vaiheet samanaikaisesti ja odota niiden kaikkien valmistumista ennen etenemistä.

Mittarit ja lokit

Pysyvä tietokantaloki, joka sisältää käsittelijäkohtaisen läpimenon, keskimääräisen ja p95-keston sekä virheprosentin.

WP-Cron Varatoiminto

Jos komentotulkkiin ei ole pääsyä, kerran minuutissa suoritettava WordPress cron käynnistää kertaluonteisen työntekijän oletusjonolle.

Väliohjelmistot

Sipulityylinen työnväliohjelmisto töille: nopeusrajoitukset, poikkeusten rajoitus, yksilöllisyys, aikakatkaisut ja päällekkäisyyksiltä suojaaminen.

PHP 8.2+

Enumeraatiot, vain luku -luokat, match-lausekkeet, konstruktorin ominaisuuksien edistäminen ja PHP-attribuutit.

Miksi Queuety

Tila säilyy kohteessa MySQL

Jonorivit, työnkulun tila, lokit, signaalit ja suoratoistetut palat tallennetaan kohteeseen MySQL, joten työntekijän uudelleenkäynnistys ei hukkaa orkestroinnin tilaa. Jokaisen vaiheen rajalla tilapäivitys, työn valmistuminen ja seuraavan työn jonoon lisääminen vahvistetaan yhdessä tapahtumassa.

Sivupyyntöjen ulkopuolella

WP-Cron käynnistyy vain sivukäyntien yhteydessä, ja 60 sekuntia kestävä LLM-kutsu katkaistaan 30 sekunnin PHP-aikakatkaisussa. Queuety-työntekijät toimivat pitkäikäisessä WP-CLI-prosessissa ja käsittelevät töitä liikennettä odottamatta.

Suojakaiteet agenttien suorituksille

for_each()-ominaisuus, jossa on koorumitila, hyväksyntäportit ja rajat, kuten max_transitions() ja max_state_bytes(), pitää pitkät agenttisuoritukset määritellyissä rajoissa.

Käytettävissä myös kohteen WordPress ulkopuolella

Tietokantapohjainen ydin toimii missä tahansa PHP-prosessissa, joka voi avata saman tietokannan. Siksi toinen sovellus voi lähettää töitä, signaaleja ja lukea työnkulun tilan. Toimintojen käynnistimet, WP-Cron-silta ja WP-CLI-komennot tarvitsevat silti WordPress.

Vertailu

Miten Queuety liittyy ajastimiin ja työnkulkumoottoreihin, jotka WordPress-kehittäjät jo tuntevat.

Queuety verrattuna muihin työkaluihin
WP-Cron Sopii hyvinSisäänrakennettu kohteeseen WordPress, joten se ei tarvitse järjestelmän ajastimen käyttöoikeutta jaetussa hostingissa. Jos tehtävän suoritusaika menee ohi, se suoritetaan seuraavalla sivulatauksella eikä hylätä. Ero kohteeseen QueuetyQueuety-työntekijät toimivat sivuston liikenteestä riippumatta ja tarvitsevat pitkäkestoisen wp queuety work -prosessin. Sen WP-Cron-silta muuntaa toistuvat tapahtumat aikatauluiksi, mutta ei vielä suorita niiden hook-kutsuja, joten WP-Cron hoitaa ne edelleen.
Action Scheduler Sopii hyvinSuunniteltu jaettavaksi lisäosien ja teemojen sisällä ilman palvelinkäyttöoikeuksia. Se käsittelee joka kuukausi miljoonia maksuja Subscriptions-palvelulle ja kohteen WooCommerce webhook-kutsuja sekä kirjaa jokaisen toiminnon hallintakäyttöliittymään. Ero kohteeseen QueuetyAction Scheduler suorittaa hookin myöhemmin, kuten viivästetyn do_action()-kutsun. Queuety lisää monivaiheiset työnkulut, joiden tila säilyy vaiheiden välillä, signaali- ja hyväksyntäodotukset sekä tilakoneet. Voit tarkastella niitä WP-CLI-komennoilla, kuten wp queuety workflow timeline.
Temporal Sopii hyvinKestävän suorituksen alusta: Event History kirjaa työnkulun jokaisen vaiheen, joten suoritus jatkuu viimeksi kirjatusta tapahtumasta kaatumisen tai katkoksen jälkeen. Temporal Cloud on vaihtoehto palvelun ylläpidolle itse. Ero kohteeseen QueuetyTemporal Service on Go-palvelin ja tietokanta, jotka toimivat sovelluksen rinnalla. Queuety tallentaa tilansa WordPress-tietokantayhteyden MySQL-tauluihin ja suorittaa työntekijät kohteen WP-CLI kautta.

Kysymykset ja vastaukset

Lyhyet vastaukset Queuety-dokumentaatiosta.

Asenna lisäosa, käynnistä työntekijä ja etene oppaiden avulla ensimmäisestä työstäsi hyväksyntätyönkulkuihin ja tilakoneisiin.