Verkkokehittäjänä on tärkeää, että sovelluksesi toimivat mahdollisimman nopeasti. Sinun tulisi rakentaa verkkosovelluksia, jotka vastaavat pyyntöihin mahdollisimman nopeasti.
Yksi monista teknologioista, jotka voivat auttaa sinua, on tehtäväjono.
Joten mitä on tehtäväjono ja miten voit käyttää sitä Node.js-sovelluksen optimointiin?
Mitä on tehtäväjono?
Viestijono on tapa asynkroniseen viestintään kahden sovelluksen tai palvelun välillä, jota yleensä kutsutaan nimellä tuottaja ja kuluttaja. Se on hyvin tunnettu konsepti, jota käytetään palvelimettomissa ja mikropalveluarkkitehtuureissa.
Käsite tehtävä tai Jobjonotus hyödyntää viestijonoa sovelluksen suorituskyvyn parantamiseksi. Se tiivistää viestien hallinnan monimutkaisuuden ja antaa sinun määrittää toimintoja töiden tai tehtävien hallintaan asynkronisesti jonon avulla, mikä vähentää muistin käyttö joissakin sovelluksen osissa.
Yleisin esimerkki viestijonoohjelmistosta on RabbitMQ. Tehtäväjonotyökaluja ovat Selleri ja Bull. Voit myös määrittää RabbitMQ: n toimimaan tehtäväjonona. Lue lisää tehtävien jonottamisesta Node.js: ssä Bullia käyttämällä.
Mikä on BullMQ?
BullMQ (Bull.js) on Node.js-kirjasto, jota käytetään jonojen toteuttamiseen Node-sovelluksissa. Bull on Redis-pohjainen järjestelmä (saatat olla tutumpi Redis työkaluna nopea tiedon tallennus) ja se on nopea ja luotettava vaihtoehto tehtäväjonoon Node.js: ssä.
Voit käyttää Bullia moniin tehtäviin, kuten viivästyneiden töiden, ajoitettujen töiden, toistettavien töiden, prioriteettijonojen ja monien muiden toteuttamiseen.
Joten kuinka voit käyttää Bull- ja Redis-toimintoja Node.js-tehtävien suorittamiseen asynkronisesti?
Bull- ja Redis-asetusten määrittäminen tehtäväjonoa varten Node.js: ssä
Node.js: n ja Bullin tehtäväjonon aloittaminen edellyttää, että Node.js ja Redis on asennettu koneellesi. Voit seurata Redis Labs -opas Rediksen asentamiseen jos sinulla ei ole sitä asennettuna.
Ensimmäinen askel Bullin käyttöönotossa on lisätä se projektisi riippuvuuksiin suorittamalla npm asennus bull tai lanka lisää bull projektisi kansion sisällä olevassa terminaalissa. On olemassa useita tapoja alustaa jono Bullissa alla olevan kuvan mukaisesti:
konst Jono = vaatia('sonni');
// eri tapoja alustaa jono
// - käyttämällä redis-URL-merkkijonoa
konst emailQueue = Uusi Jonottaa("Sähköpostijono", 'redis://127.0.0.1:6379');// - redis-yhteys- ja jonoasetukset-objektilla
konst videoQueue = Uusi Jonottaa("Video jono", 'redis://127.0.0.1:6379', queueOptions);// - ilman redis-yhteyttä, mutta queueOptionilla
konst docQueue = Uusi Jonottaa("Asiakirjajono", queueOptions);
// - ilman redis-yhteyttä tai jonoasetuksia
konst QueueClient = Uusi Jonottaa("Oma jononi");
Nämä kaikki käyttävät Node.js: n Bull-määrityksiä mahdollisimman vähän. Optio-objekti tukee monia ominaisuuksia ja voit oppia niistä jonovaihtoehdot Bullin dokumentaatiossa.
Sähköpostitehtäväjonon käyttöönotto BullMQ: lla
Jos haluat ottaa käyttöön jonon sähköpostien lähettämistä varten, voit määrittää tuottajatoiminnon, joka lisää sähköpostit sähköpostijonoon, ja kuluttajatoiminnon, joka käsittelee sähköpostien lähettämisen.
Ensinnäkin voit alustaa jonosi luokassa käyttämällä Redis-URL-osoitetta ja joitain jonovaihtoehtoja, kuten alla näkyy.
// queueHandler.js
konst Jono = vaatia('sonni');// Käytä tässä oikeaa sähköpostinkäsittelymoduulia - tämä on vain esimerkki
konst emailHandler = vaatia('./emailHandler.js');// määrittää vakiot, Redis-URL-osoitteen ja jonoasetukset
konst REDIS_URL = 'redis://127.0.0.1:6379';konst queueOpts = {
// nopeudenrajoittimen asetukset jonon ylikuormituksen välttämiseksi
rajoitin: {
// maksimimäärä tehtäviä jonossa voi kestää
max: 100,// odotusaika millisekunteina ennen uusien töiden hyväksymistä sen jälkeen
// saavuttaa rajan
kesto: 10000
},
etuliite: 'SÄHKÖPOSTI-TAK', // etuliite, joka lisätään kaikkiin jonoavaimiin
oletustyövaihtoehdot: { // oletusasetukset jonossa oleville tehtäville
yrityksiä: 3, // oletusmäärä, kuinka monta kertaa tehtävää yritetään uudelleen// tehtävän poistaminen jonosta valmistumisen jälkeen
RemoveOnComplete: totta
}
};luokkaaEmailQueue{
rakentaja() {
Tämä.jono = Uusi Jonottaa("Sähköpostijono", REDIS_URL, queueOpts);
}
};
viedäoletuksena EmailQueue; // vie luokka
Nyt kun olet alustanut jonon, voit määrittää tuottajafunktiosi (käyttäen Bull'sin lisätä() toiminto) menetelmänä EmailQueue luokkaa lisätäksesi sähköpostit tehtäväjonoon. Seuraava koodilohko osoittaa tämän:
// queueHandler.js
luokkaaEmailQueue{
rakentaja () {
// ...
}// tuottajatoiminto sähköpostien lisäämiseksi jonoon
asynk addEmailToQueue (emailData) {
// lisää tehtävä nimeltä 'email_notification' jonoon
odottaaTämä.queue.add('email_notification', emailData);
konsoli.Hirsi('sähköposti on lisätty jonoon...');
}
};
viedäoletuksena EmailQueue; // vie luokka
Tuottajafunktio on valmis, ja voit nyt määritellä kuluttajafunktion (käyttäen Bull's käsitellä asiaa() toiminto) käsittelemään kaikki jonossa olevat sähköpostitehtävät – eli. soita toimintoon lähettääksesi sähköpostin. Sinun tulee määrittää tämä kuluttajafunktio luokan rakentajassa.
// queueHandler.js
luokkaaEmailQueue{
rakentaja () {
// ...// kuluttajafunktio, joka ottaa tehtävän nimen ja
// takaisinsoittotoiminto
Tämä.queue.process('email_notification', asynk (sähköpostityö, tehty) => {
konsoli.Hirsi("sähköposti-ilmoitustehtävän käsittely");
odottaa emailHandler.sendEmail (emailJob); // lähetä sähköpostia
tehty(); // suorita tehtävä
})
}
// ...
};
viedäoletuksena EmailQueue; // vie luokka
Työllä voi myös olla vaihtoehtoja määritellä sen käyttäytyminen jonossa tai kuinka kuluttajatoiminto käsittelee sitä. Saat lisätietoja tästä aiheesta työvaihtoehtoja Bullin dokumentaatiossa.
The sähköpostiTyö argumentti on objekti, joka sisältää tehtävän ominaisuudet jonon käsiteltäväksi. Se sisältää myös sähköpostin rakentamiseen tarvittavat tärkeimmät tiedot. Ymmärtämisen helpottamiseksi lähettää sähköpostia() toiminto olisi samanlainen kuin tämä esimerkki:
// emailHandler.js
konst sendgridMail = vaatia('@sendgrid/mail');konst apiKey = process.env. SENDGRID_API_KEY
sendgridMail.setApiKey (apiKey); // Aseta sähköpostin siirtolaitteen suojaustiedot
konst sendEmail = asynk (emailJob) => {
yrittää {
// poimi sähköpostitiedot työstä
konst { nimi, sähköpostiosoite } = sähköpostiJob.data;konst viesti = {
alkaen: "[email protected]",
vastaanottajalle: "sinä@esimerkki.fi",
aihe: 'Hei! Tervetuloa',
teksti: `Hei ${name}, tervetuloa MUO: lle
};odottaa sendgridMail.sendMail (viesti); // lähettää sähköpostia
// merkitse tehtävä suoritetuksi jonossa
odottaa emailJob.moveToCompleted('tehty', totta);
konsoli.Hirsi("Sähköposti lähetetty onnistuneesti...");
} ottaa kiinni (virhe) {
// siirrä tehtävä epäonnistuneisiin töihin
odottaa emailJob.moveToFailed({ viesti: 'tehtävän käsittely epäonnistui..' });
konsoli.error (virhe); // kirjaa virhe
}
}
viedäoletuksena lähettää sähköpostia;
Nyt kun sekä tuottaja- että kuluttajatoiminnot on määritetty ja käyttövalmis, voit nyt soittaa tuottajafunktiolle missä tahansa sovelluksessasi lisätäksesi sähköpostin käsittelyjonoon.
Esimerkki ohjaimesta näyttäisi tältä:
// userController.js
konst EmailQueue = vaatia("../handlers/queueHandler.js")konst ilmoittautuminen = asynk (req, res) => {
konst { nimi, sähköpostiosoite, salasana } = req.body;// --
// kysely uuden käyttäjän lisäämiseksi tietokantaan...
// --// lisää sähköpostijonoon
konst emailData = { nimi, sähköpostiosoite };
odottaa EmailQueue.addEmailToQueue (emailData);
res.status(200).json({
viesti: "Rekisteröityminen onnistui, tarkista sähköpostisi"
})
}
Sinun queueHandler.js tiedoston pitäisi nyt olla seuraava:
// queueHandler.js
konst Jono = vaatia('sonni');
konst emailHandler = vaatia("../handlers/emailHandler.js");konst REDIS_URL = 'redis://127.0.0.1:6379';
konst queueOpts = {
rajoitin: {
max: 100,
kesto: 10000
},etuliite: 'SÄHKÖPOSTI-TAK',
oletustyövaihtoehdot: {
yrityksiä: 3,
RemoveOnComplete: totta
}
};luokkaaEmailQueue{
rakentaja() {
Tämä.jono = Uusi Jonottaa("Sähköpostijono", REDIS_URL, queueOpts);// kuluttaja
Tämä.queue.process('email_notification', asynk (sähköpostityö, tehty) => {
konsoli.Hirsi("sähköposti-ilmoitustehtävän käsittely");
odottaa emailHandler.sendEmail (emailJob);
tehty();
})
}// tuottaja
asynk addEmailToQueue (emailData) {
// lisää tehtävä nimeltä 'email_notification' jonoon
odottaaTämä.queue.add('email_notification', emailData);
konsoli.Hirsi('sähköposti on lisätty jonoon...');
}
};
viedäoletuksena EmailQueue;
Kun otat tämän käyttöön Node.js REST API: ssa, huomaat kirjautumisen päätepisteen vasteajan lyhenemisen ja nopeammat sähköpostin toimitusajat vaihtoehtoon verrattuna.
Tehtäväjonojen ansiosta voit myös käsitellä kirjautumis- ja sähköpostivirheitä itsenäisesti.
Sovellusten optimointi tehtäväjonojen avulla
Viesti- ja tehtäväjonot ovat loistava tapa parantaa sovellusten yleistä suorituskykyä. Ne ovat myös erittäin halpoja ja voit käyttää niitä niin monessa sovelluksen osassa kuin tarvitset.
Vaikka tässä opetusohjelmassa käytettiin sähköposteja esimerkkiskenaariona muistia vievien tehtävien käsittelyssä jonoille, on monia muita tapauksia, joissa voit käyttää samoja käsitteitä. Näitä ovat raskaat luku-/kirjoitustoiminnot, korkealaatuisten kuvien tai asiakirjojen renderöinti ja joukkoilmoitusten lähettäminen.