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:
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:
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
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.