window.pipedriveLeadboosterConfig = { base: leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = window if (w.LeadBooster) { console.warn('LeadBooster on juba olemas') } else { w.LeadBooster = { q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: function (n) { this.q.push({ t: 't', n: n }) }, } } })() Lisateave Ruby on Rails ja Pub/Sub - The Codest kohta
The Codest
  • Meie kohta
  • Teenused
    • Tarkvaraarendus
      • Frontend arendus
      • Backend arendus
    • Staff Augmentation
      • Frontend arendajad
      • Backend arendajad
      • Andmeinsenerid
      • Pilveinsenerid
      • QA insenerid
      • Muud
    • See nõuandev
      • Audit ja nõustamine
  • Tööstusharud
    • Fintech & pangandus
    • E-commerce
    • Adtech
    • Healthtech
    • Tootmine
    • Logistika
    • Autotööstus
    • IOT
  • Väärtus
    • CEO
    • CTO
    • Tarnejuht
  • Meie meeskond
  • Case Studies
  • Tea kuidas
    • Blogi
    • Kohtumised
    • Veebiseminarid
    • Ressursid
Karjäärivõimalused Võtke ühendust
  • Meie kohta
  • Teenused
    • Tarkvaraarendus
      • Frontend arendus
      • Backend arendus
    • Staff Augmentation
      • Frontend arendajad
      • Backend arendajad
      • Andmeinsenerid
      • Pilveinsenerid
      • QA insenerid
      • Muud
    • See nõuandev
      • Audit ja nõustamine
  • Väärtus
    • CEO
    • CTO
    • Tarnejuht
  • Meie meeskond
  • Case Studies
  • Tea kuidas
    • Blogi
    • Kohtumised
    • Veebiseminarid
    • Ressursid
Karjäärivõimalused Võtke ühendust
Tagasi nool TAGASI
2022-12-07
Tarkvaraarendus

Lisateave Ruby on Rails ja Pub/Sub kohta

The Codest

Michal Pawlak

Ruby vanem arendaja

Pub/Sub võib tuua projektile palju kasu - see võib muuta koodi puhtaks, lahutada teenuseid ja muuta need kergesti skaleeritavaks. Loe Pub/Subi kohta lähemalt järgmisest artiklist ja tõsta oma projekti tasemele!

Ruby on Rails (Rails, RoR) on tuntud veebirakenduste raamistik, mis on kirjutatud keeles Ruby programmeerimiskeel. Pub/Sub on tarkvara disainimustrite lühinimetus, mida nimetatakse Publish-subscribe. Ma selgitan, kuidas Railsi tarkvarakomponentide vahelist suhtlust saaks käsitleda Pub/Subi abil.

Mis on Pub/sub?

Pub/sub on tarkvara disainimudel, mis pakub teenuste vahelist suhtlust. Teenus
kaasneb üks kahest rollist: avaldaja (kes toodab) või vastuvõtja (kes tarbib). Mis on
toodetakse tarbitavaks sündmuseks või sõnumiks või teatiseks. In the
käesoleva artikli kontekstis kasutatakse neid mõisteid vaheldumisi ühe ja sama asja tähistamiseks.
Teenus, mis toodab, ei tea, kes tarbib. Teenus, mis tarbib, ei tea
teate sõnumi päritolu. Nad võivad jääda üksteisele tundmatuks. See erineb
sõnumijärjekorrad, kus sõnumi saatev komponent teab sageli selle sihtkohta.
- selline sõnumite saatmise stiil võimaldab saata sõnumeid kõikjale. See mehhanism on põhiline
aadressilt Pub/sub ja see tähendab, et nad on lahutatud.

Oma ühiste huvide väljendamiseks peavad nad jagama ühist arusaama. Seetõttu,
mõlemas rollis on vaikimisi mehhanismi pulk, kus sõnumi tootja ja
sõnumi tarbija vastab. Seda mehhanismi nimetatakse subjektiks, tellimuseks või teemaks. See on
vastutab sõnumite liigitamise eest subjektidele, see on sisuliselt olematu sõnumifilter.
Teemad toimivad saatejaamana. Väljaandja toodab sõnumi teemale,
tellijad saavad koheselt teate teemast. Kuna lahtiseotud
teenuste puhul on kõige tõhusam viis sõnumite vahetamiseks nende asünkroonne käitlemine.

Rails ilma Pub/Subita

Vaikimisi ei ole Railsi tarkvaradisainimustrite puhul sõnumite edastamiseks komponentide vahel mingeid üleliigseid kulusid. Arendajad kasutavad standardseid objektorienteeritud programmeerimine (OOP) paradigma: parameetrite edastamine funktsioonidele, klasside küsimine väärtuste kohta.

Kui taotlus on üsna lihtne, võib sellest piisata. Kui rakendus kasvab, näiteks on vaja teha mõningaid operatsioone asünkroonselt, siis on projekt vajab abstraktsiooni, mis lahendab selle andmetöötluse. Selle asemel, et leiutada ratast uuesti, saavad arendajad rakendada Pub/sub et täita see abstraktsiooni puudus.

Pub/Sub koos Rails'iga plussid

  • Vältige aktiivse kirje tagasikutseid.
  • Asünkroonse paralleeltöötluse lisamine süsteemi parandab jõudlust, usaldusväärsust ja skaleeritavust.
  • Sõnumeid saab edastada asünkroonselt süsteemi eri osadele.
  • Võimaldab sõnumeid edastada asünkroonselt süsteemi erinevatele osadele.
  • Decoupling - funktsionaalsuse lisamine või muutmine ei mõjuta midagi, sest Pub/Sub
    võimaldab teil muuta, kuidas kõik omavahel suhtleb.
  • Sõnumite tarbija ei pea enam perioodiliselt kontrollima, kas uuendusi või uusi
    teave. See vähendab edastamise viivitust, mis võib olla eriti problemaatiline süsteemides, kus
    mis ei salli viivitusi.
  • Ei ole mingit piirangut, kui palju tellijaid süsteem suudab käsitleda, sest see võib muutuda,
    uuendada, paljuneda või kaduda igal ajal.

Pub/Sub koos Railsiga miinused

  • Pub/sub-süsteemide peamine puudus on see, et nad lahutavad kirjastaja ja
    tellija.

Rails Pub/Sub tutvustada

Näiteid allikas Rails kirjutati kasutades raamatukogu
Pub/Sub on Rails (Ruby nomenklatuuris nimetatakse raamatukogu gemiks): Rohkem üksikasju leiate gemi readme'ist. Rakendus koosneb moodulitest:

  1. Domeen,
  2. Üritus,
  3. Sündmuse käsitseja,
  4. Ürituse kirjastaja,
  5. Tellimus.

Domeen

Kirjeldab äriloogikat, et anda kontekst Pub/Subile ja seega teha puhas kood.

 moodul Teated
   laiendada PubSub::Domain
 end
 moodul Aruanded
   laiendada PubSub::Domain
 end

Sündmus

See on klass, mis kirjeldab juhtunut. Deklareerige klassi nimi võimalikult isekirjeldavaks koos sellega, mis juhtus, näiteks: tühistatud, muudetud, loodud, hävitatud, saadetud, uuendatud. Sündmuse nimed võivad välja näha järgmiselt: ProfitAndLossStatementCreatedEvent, mis tähendab, et finantsaruanne loodi.

 class Reports::ProfitAndLossStatementCreatedEvent < PubSub::DomainEvent
   atribuut :profit_and_loss_statement_id, Types::Strict::Integer
 end

Sündmuse kirjastaja

Klass, mis on võimeline sündmusi välja saatma. Näide näitab teenuse aruande loomist. Kui aruanne on edukalt loodud, saadetakse välja selle aruande loomise sündmus.

klass Reports::ProfitAndLossStatementService
   include PubSub::Emit
    def execute
     emit(:report_profit_and_loss_statement_created, profit_and_loss_statement_id: id) if result.ok?
   end
 end

Sündmuse käsitseja

See klass tuleks käivitada vastusena sündmuse käsitlemisele.

moodul Teated
 class ReportsProfitAndLossStatementCreatedHandler < PubSub::DomainEventHandler
   def call
     ReportMailer.profit_and_loss_statement(profit_and_loss_statement).deliver_now
   end

   private

   def profit_and_loss_statement
     ProfitAndLossStatement.find(event_data.profit_and_loss_statement_id)
   end
 end
end

Tellimus

Sündmused on seotud nende käitlejatega tellimise kaudu.

teatised:
 Aruanded__kasum_ja_kaotuse_aruanne_loodud: async

Näide kasutusjuhtumitest:

  • "Follow" funktsioon sotsiaalvõrgustikes,
  • Asjade internet,
  • Postitus,
  • Teade genereeritud failide kohta.

Sarnased mustrid

  1. EventBus - komponendid võivad saata sündmusi EventBus'ile, teadmata, kes neid vastu võtab või kui palju reageerib,
  2. Vaatleja - subjekt säilitab nimekirja sõltuvatest isikutest, mida nimetatakse vaatlejateks, ja teavitab neid, kui nende seisund muutub,
  3. Koondamine - küsitlemisel küsivad kliendid perioodiliselt süsteemilt, kas on uusi sündmusi või andmeid.

Kalliskivid

  • https://github.com/edisonywh/rocketman

  • https://github.com/krisleech/wisper

  • https://github.com/stevo/pubsubaadressilrööpad

Kokkuvõte

Pub/sub ei ole Ruby in Railsis levinud lähenemisviis. Nagu artiklis tutvustatud, võib see muster tuua projektile palju kasu - see võib muuta koodi puhtaks, lahutada teenuseid ja muuta need kergesti skaleeritavaks.

koostööbänner

Seotud artiklid

Fintech

5 näidet Ruby parimast kasutamisest

Kas olete kunagi mõelnud, mida me saame teha Ruby'ga? Noh, taevas on ilmselt piirideta, kuid me räägime hea meelega mõnest rohkem või vähem teadaolevast juhtumist...

The Codest
Pawel Muszynski Software Engineer
Tarkvaraarendus

Railsi arendamine TMUX, Vim, Fzf + Ripgrep abil

Mõned aastad tagasi grillisin koos mõne oma sõbraga, kes olid kõik Java-arendajad. Ei tea, kuidas see tekkis, aga me hakkasime rääkima oma kodeerimiskeskkondadest. I...

The Codest
Marcin Doliwa Software Engineer
Tarkvaraarendus

Tootearendus: Python vs. Ruby

Python ja Ruby on mõlemad kõige laialdasemalt kasutatavad backend programmeerimiskeeled. Python on veidi populaarsem ja laiema kasutusalaga. Ruby toob aga ka palju eeliseid ja...

The Codest
Kamil Ferens Majanduskasvu juht
Tarkvaraarendus

Ruby on Rails modulariseerimine koos Packwerki I episoodiga

Inimestel on raske näha probleemi suurt pilti, ilma et nad pühendaksid sellele palju aega ja vaeva. See juhtub eriti suurte ja keeruliste rakendustega töötades.....

Nicolas Nisoria
Tarkvaraarendus

Racki roll Ruby ökosüsteemis

Õppige meie eksperdilt rohkem hammaste rollist Ruby ökosüsteemis ja parandage oma rubiinimängu oskust.

Nicolas Nisoria

Tellige meie teadmistebaas ja jääge kursis IT-sektori eksperditeadmistega.

    Meie kohta

    The Codest - rahvusvaheline tarkvaraarendusettevõte, mille tehnoloogiakeskused asuvad Poolas.

    Ühendkuningriik - peakorter

    • Büroo 303B, 182-184 High Street North E6 2JA
      London, Inglismaa

    Poola - kohalikud tehnoloogiakeskused

    • Fabryczna büroopark, Aleja
      Pokoju 18, 31-564 Kraków
    • Brain Embassy, Konstruktorska
      11, 02-673 Varssavi, Poola

      The Codest

    • Kodu
    • Meie kohta
    • Teenused
    • Case Studies
    • Tea kuidas
    • Karjäärivõimalused
    • Sõnastik

      Teenused

    • See nõuandev
    • Tarkvaraarendus
    • Backend arendus
    • Frontend arendus
    • Staff Augmentation
    • Backend arendajad
    • Pilveinsenerid
    • Andmeinsenerid
    • Muud
    • QA insenerid

      Ressursid

    • Faktid ja müüdid koostööst välise tarkvaraarenduspartneriga
    • USAst Euroopasse: Miks otsustavad Ameerika idufirmad Euroopasse ümber asuda?
    • Tech Offshore arenduskeskuste võrdlus: Euroopa (Poola), ASEAN (Filipiinid), Euraasia (Türgi).
    • Millised on CTO ja CIOde peamised väljakutsed?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Copyright © 2025 by The Codest. Kõik õigused kaitstud.

    etEstonian
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese ko_KRKorean es_ESSpanish nl_NLDutch elGreek etEstonian