Queuety
WordPress-työnkulkujärjestelmä.
wp plugin install https://github.com/inline0/queuety/releases/latest/download/queuety.zip --activateUusin julkaisu v0.22.0 GPL-2.0-or-later WordPress 6.4+, PHP 8.2+
use Queuety\Queuety;
Queuety::register( 'send_email', SendEmailHandler::class );
Queuety::dispatch( 'send_email', [
'to' => 'user@example.com',
'subject' => 'Welcome',
'body' => 'Hello from Queuety!',
] );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().
$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' ] );# Single worker on default queue
wp queuety work
# Process a specific queue
wp queuety work --queue=emails
# Process multiple queues in priority order
wp queuety work --queue=critical,default,low
# One-shot mode
wp queuety work --once
# Multi-worker mode
wp queuety work --workers=4
# Adaptive worker pool
wp queuety work --queue=providers --min-workers=2 --max-workers=6Suorat 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.
| Työkalu | Sopii hyvin | Ero kohteeseen Queuety |
|---|---|---|
| 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.
Et yksinkertaisille töille oletusjonossa. Lisäosa käynnistää kertaluonteisen työntekijän kohteen WordPress cron kautta minuutin välein, kunhan WordPress cron käynnistyy. Kukin suoritus käsittelee yhden työn. Toistuvat aikataulut, mukautetut jonot ja lyhyempi viive edellyttävät erillistä wp queuety work -prosessia.
Ei. Se tarvitsee joko mysqli- tai pdo_mysql-ajurin ja käyttää oletuksena mysqli-ajuria kohteessa WordPress. Määritä QUEUETY_DB_DRIVER arvoksi auto, mysqli tai pdo pakottaaksesi ajurin.
Työt varataan komennolla SELECT ... FOR UPDATE SKIP LOCKED, jota MySQL tukee versiosta 8.0 alkaen ja MariaDB versiosta 10.6 alkaen. Projektin CI suoritetaan kohteessa MySQL 8.0.
Kyllä. Tietokantapohjainen ydin eli työt, työntekijät, työnkulut, signaalit, tilakoneet, artefaktit, lokit, mittarit ja aikataulut toimivat suoran Connection-yhteyden kautta. Työntekijäpoolit tarvitsevat myös DB_HOST-, DB_NAME-, DB_USER- ja DB_PASSWORD-vakiot. Queuety::on_action(), replace_wp_cron(), lisäosan käynnistys ja wp queuety -komennot edellyttävät edelleen kohdetta WordPress.
Ei vielä. Queuety::replace_wp_cron() muuntaa toistuvat wp_schedule_event()-tapahtumat Queuety-aikatauluiksi, mutta niiden hook-kutsuja ei vielä suoriteta, joten jätä WP-Cron käyttöön tapahtumille, joiden on käynnistyttävä. Kohteen wp_schedule_single_event() tapahtumat hoitaa edelleen WP-Cron.
wp queuety work --workers=N käynnistää kiinteän poolin ja käynnistää kaatuneet aliprosessit uudelleen. Se tarvitsee pcntl- ja posix-laajennukset. --min-workers ja --max-workers käynnistävät mukautuvan poolin, joka kasvaa jonon kasvaessa ja pienenee, kun jono hiljenee.
Asenna lisäosa, käynnistä työntekijä ja etene oppaiden avulla ensimmäisestä työstäsi hyväksyntätyönkulkuihin ja tilakoneisiin.