Siirry sisältöön

WP-Cron-korvaaja

Queuety voi korvata sisäänrakennetun WordPress cron-järjestelmän. Kun se on käytössä, wp_schedule_event()-kutsut siepataan ja ohjataan Queuetyn ajastimen kautta oletusarvoisen WP-Cron-mekanismin sijaan. Tapahtumat käsittelee Queuety-työntekijä, joka suorittaa ne sivuston liikenteestä riippumatta.

Nykyinen rajoitus: silta luo Queuety-ajastukset, mutta työntekijällä ei ole käsittelijää niiden tuottamille __queuety_cron_{hook}-töille, joten alkuperäisiä WordPress-takaisinkutsuja ei koskaan suoriteta. Jokainen työ epäonnistuu, sitä yritetään uudelleen viiveajan jälkeen, ja lopulta se siirretään sivuun (#9). Älä ota siltaa käyttöön sivustolla, jolla cron-tapahtumien on suorituttava, ennen kuin tämä on korjattu.

Korvaajan käyttöönotto

Kutsu Queuety::replace_wp_cron() ajoissa lisäosasi tai teemasi alustuksessa:

PHP
use Queuety\Queuety;

Queuety::replace_wp_cron();

Tämä kutsutaan yleensä lisäosan päätiedostossa tai plugins_loaded-koukussa. Kutsu on tehtävä, kun WordPress on ladattu eli lisäosan on oltava aktiivinen.

Siepattavat kutsut

cron-silta kytkeytyy kolmeen WordPress-suodattimeen:

WordPress-funktio Kytketty suodatin Toiminta
wp_schedule_event() pre_schedule_event Luo Queuety-ajastuksen samalla aikavälillä
wp_unschedule_event() pre_unschedule_event Poistaa vastaavan Queuety-ajastuksen
wp_get_scheduled_event() pre_get_scheduled_event Palauttaa ajastustiedot lähteestä Queuety

Vain toistuvat tapahtumat (joilla on schedule-ominaisuus, kuten hourly, twicedaily, daily) siepataan. wp_schedule_single_event()-komennolla ajastettuja kertaluonteisia tapahtumia ei siepata.

Tapahtumien yhdistäminen

Kun lisäosa kutsuu wp_schedule_event(), Queuety selvittää ajastuksen nimen käyttämällä wp_get_schedules()-toimintoa, luo Queuety-ajastuksen käsittelijän nimellä __queuety_cron_{hook} ja tallentaa alkuperäisen WordPress-koukun nimen ja argumentit ajastuksen sisältöön.

Tarkoituksena on, että ajastetun työn käsittelevä Queuety-työntekijä kutsuu do_action()-toimintoa alkuperäisellä koukun nimellä ja argumenteilla, jolloin olemassa olevat WordPress-takaisinkutsut suoritetaan ja Queuety ohjaa ajankohtaa. CronBridge::process_cron_event() toteuttaa tämän kutsun, mutta sitä ei vielä kutsuta (katso yllä oleva rajoitus). Ajastukset käsittelee lisäksi vain pitkään käynnissä oleva wp queuety work-prosessi noin kerran minuutissa (katso Ajastus).

Aikavälin määrittäminen

Silta selvittää ajastusten nimet ensin käyttämällä wp_get_schedules()-toimintoa ja turvautuu sitten sisäänrakennettuihin oletusarvoihin:

Ajastuksen nimi Aikaväli
hourly 3,600 sekuntia
twicedaily 43,200 sekuntia
daily 86,400 sekuntia
weekly 604,800 sekuntia

cron_schedules-suodattimella rekisteröidyt mukautetut ajastusvälit ovat tuettuja, kunhan wp_get_schedules() palauttaa ne.

WP-Cronn palauttaminen

Palaa oletusarvoiseen WordPress cron-järjestelmään:

PHP
Queuety::restore_wp_cron();

Tämä poistaa suodinkoukut ja sallii WordPressn käsitellä cron-tapahtumia jälleen sisäänrakennetulla mekanismillaan. Huomaa, että siltaa asennettaessa DISABLE_WP_CRON määritetään arvoksi true eikä sitä voi poistaa määrityksistä suorituksen aikana, joten vakio on ehkä poistettava kohteesta wp-config.php tai prosessi käynnistettävä uudelleen.

Milloin sitä kannattaa käyttää

Korvaaja on hyödyllisimmillään, kun sivustosi liikenne on vähäistä, tarvitset tarkempaa ajoitusta kuin WP-Cron pystyy tarjoamaan tai käytössäsi on jo Queuety-työntekijöitä ja haluat cron-suorituksen samaan operatiiviseen järjestelmään. Se helpottaa myös keskitettyä seurantaa, koska cron-tapahtumat näkyvät samoissa lokeissa ja mittareissa kuin muut jonotyöt.

Rajoitukset

Käyttöön liittyy muutamia tärkeitä rajoituksia. Käynnissä oleva Queuety-työntekijä on välttämätön, muuten ajastettuja tapahtumia ei koskaan suoriteta. Vain toistuvat ajastukset siepataan; komennolla wp_schedule_single_event() luodut kertaluonteiset tapahtumat jäävät edelleen sillan ulkopuolelle. replace_wp_cron() määrittää myös DISABLE_WP_CRONn nykyisen PHP-prosessin loppuajaksi, joten restore_wp_cron() poistaa koukut, mutta ei voi poistaa vakiota määrityksistä. Lopuksi silta toimii vain, kun WordPress on ladattu, sillä se on riippuvainen WordPress-suodattimista ja do_action()-toiminnosta.

Esimerkki: täydellinen määritys

PHP
use Queuety\Queuety;

// In your plugin's main file.
add_action( 'plugins_loaded', function () {
    Queuety::replace_wp_cron();
} );

Tässä ei tarvitse kutsua toimintoa Queuety::init(): aktiivinen Queuety-lisäosa muodostaa yhteyden WordPress-tietokannan tunnistetiedoilla ja alustaa itsensä plugins_loaded-tapahtumassa. replace_wp_cron() asentaa vain suodattimet, joten sen toiminta ei edellytä, että alustus olisi tehty ensin.

Tämän jälkeen lisäosien wp_schedule_event()-toiminnolla rekisteröimät toistuvat tapahtumat tallennetaan Queuety-ajastuksina. Niiden takaisinkutsuja ei suoriteta, ennen kuin #9 on korjattu.