The Codest
  • Apie mus
  • Paslaugos
    • Programinės įrangos kūrimas
      • Priekinės dalies kūrimas
      • Galinės dalies kūrimas
    • Staff Augmentation
      • Priekinės dalies kūrėjai
      • Atgalinės versijos kūrėjai
      • Duomenų inžinieriai
      • Debesų inžinieriai
      • QA inžinieriai
      • Kita
    • Patariamoji tarnyba
      • Auditas ir konsultacijos
  • Pramonės šakos
    • Fintech ir bankininkystė
    • E-commerce
    • Adtech
    • Sveikatos technologijos
    • Gamyba
    • Logistika
    • Automobiliai
    • IOT
  • Vertė už
    • CEO
    • CTO
    • Pristatymo vadybininkas
  • Mūsų komanda
  • Case Studies
  • Sužinokite, kaip
    • Tinklaraštis
    • Susitikimai
    • Interneto seminarai
    • Ištekliai
Karjera Susisiekite su mumis
  • Apie mus
  • Paslaugos
    • Programinės įrangos kūrimas
      • Priekinės dalies kūrimas
      • Galinės dalies kūrimas
    • Staff Augmentation
      • Priekinės dalies kūrėjai
      • Atgalinės versijos kūrėjai
      • Duomenų inžinieriai
      • Debesų inžinieriai
      • QA inžinieriai
      • Kita
    • Patariamoji tarnyba
      • Auditas ir konsultacijos
  • Vertė už
    • CEO
    • CTO
    • Pristatymo vadybininkas
  • Mūsų komanda
  • Case Studies
  • Sužinokite, kaip
    • Tinklaraštis
    • Susitikimai
    • Interneto seminarai
    • Ištekliai
Karjera Susisiekite su mumis
Atgal rodyklė GRĮŽTI ATGAL
2022-12-07
Programinės įrangos kūrimas

Sužinokite daugiau apie Ruby on Rails su "Pub/Sub

The Codest

Michal Pawlak

Vyresnysis "Ruby" programuotojas

"Pub/Sub" projektui gali duoti daug naudos - dėl jos kodas gali būti švarus, paslaugos gali būti atskirtos ir lengvai keičiamos. Sužinokite daugiau apie "Pub/Sub" šiame straipsnyje ir pakelkite savo projekto lygį!

Ruby svetainėje Bėgiai (Bėgiai, RoR) yra gerai žinomas žiniatinklio svetainė taikomoji sistema, parašyta Ruby programavimo kalba. Viešbutis / restoranas yra trumpas programinės įrangos projektavimo šablonų, vadinamų Leidinio prenumerata. Paaiškinsiu, kaip "Rails" programinės įrangos komponentų bendravimas gali būti tvarkomas naudojant "Pub/Sub".

Kas yra "Pub/sub"?

Viešbutis / pavaldžioji įstaiga yra programinės įrangos projektavimo modelis, užtikrinantis ryšį tarp paslaugų. Paslauga
atlieka vieną iš dviejų vaidmenų: leidėjo (kuris gamina) arba gavėjo (kuris vartoja). Kas yra
gaminamas ir vartojamas kaip įvykis, pranešimas arba pranešimas. Į
šiame straipsnyje jie vartojami pakaitomis tam pačiam dalykui įvardyti.
Paslauga, kuri gamina, nežino, kas vartoja. Paslauga, kuri vartoja, nežino.
sužinoti pranešimo kilmę. Jie gali likti nežinomi vienas kitam. Tai skiriasi nuo
pranešimų eilės, kai pranešimą siunčiantis komponentas dažnai žino jo paskirties vietą.
- šis žinučių siuntimo stilius leidžia siųsti žinutes bet kur. Šis mechanizmas yra pagrindinis
iš Viešbutis / pavaldžioji įstaiga ir tai reiškia, kad jie yra atsieti.

Kad galėtų išreikšti abipusius interesus, jie turi turėti bendrą supratimą. Todėl,
abu vaidmenys turi numanomą "lazdelės" mechanizmą, kai pranešimo gamintojas ir
susitikti su pranešimo vartotoju. Šis mechanizmas vadinamas subjektu, prenumerata arba tema. Jis yra
atsakinga už pranešimų priskyrimą kategorijoms pagal subjektus, iš esmės tai yra bebūklinis pranešimų filtras.
Temos veikia kaip transliavimo stotys. Leidėjas sukuria pranešimą temai,
abonentai iš karto gauna pranešimą iš temos. Dėl atsietos
paslaugomis, efektyviausias būdas keistis pranešimais yra juos tvarkyti asinchroniškai.

Bėgiai be "Pub/Sub

Pagal numatytuosius nustatymus "Rails" nėra jokių "Rails" pridėtinių išlaidų, susijusių su programinės įrangos projektavimo šablonais, skirtais pranešimams tarp komponentų perduoti. Kūrėjai naudoja standartinius į objektus orientuotas programavimas (OOP) paradigma: parametrų perdavimas funkcijoms, klausiant klasių apie reikšmes.

Kai paraiška yra gana nesudėtinga, to gali pakakti. Kai programa auga, pavyzdžiui, kai kurias operacijas reikia atlikti asinchroniškai, tada projektas reikia abstrakcijos, kuri išsprendžia, kad duomenys darbo eiga. Užuot išradinėję dviratį, kūrėjai gali įgyvendinti Viešbutis / pavaldžioji įstaiga užpildyti šį abstrakcijos trūkumą.

"Pub/Sub" privalumai naudojant "Rails

  • Venkite aktyvių įrašų atgalinių iškvietimų.
  • Į sistemą įtraukus asinchroninį lygiagretųjį apdorojimą, padidėja našumas, patikimumas ir patikimumas. mastelio keitimas yra patobulintos.
  • Pranešimai gali būti transliuojami asinchroniškai į skirtingas sistemos dalis.
  • Leidžia asinchroniškai transliuoti pranešimus į skirtingas sistemos dalis.
  • Atskyrimas - funkcijos pridėjimas ar pakeitimas neturės jokios įtakos, nes "Pub/Sub
    galite keisti, kaip viskas sąveikauja.
  • Pranešimo vartotojui nebereikės periodiškai tikrinti, ar nėra atnaujinimų arba naujų
    informacija. Tai sumažina pristatymo vėlavimą, kuris gali būti ypač problemiškas sistemose.
    be jokios tolerancijos vėlavimui.
  • Sistema negali apriboti abonentų skaičiaus, nes jis gali keistis,
    bet kada atnaujinti, padauginti arba išnykti.

"Pub/Sub" su "Rails" trūkumai

  • Pagrindinis Pub/sub sistemų trūkumas yra tai, kad leidėjas ir
    abonentas.

Rails Pub/Sub pristatyti

"Rails" šaltinio pavyzdžiai buvo parašyti naudojant biblioteką
"Pub/Sub on Rails (Ruby nomenklatūroje biblioteka vadinama gem): Daugiau informacijos rasite gem'o readme. Įgyvendinimą sudaro moduliai:

  1. Domenas,
  2. Renginys,
  3. Įvykio tvarkyklė,
  4. Renginio leidėjas,
  5. Prenumerata.

Domenas

Aprašoma verslo logika, kad būtų galima pateikti "Pub/Sub" kontekstą ir taip užtikrinti švarią "Pub/Sub" logiką. kodas.

 modulis Pranešimai
   išplėsti PubSub::Domain
 pabaiga
 modulis Ataskaitos
   išplėsti PubSub::Domain
 pabaiga

Renginys

Tai klasė, kurioje aprašoma tai, kas įvyko. Deklaruokite klasės pavadinimą kaip savaime apibūdinantį, kas įvyko, pavyzdžiui: atšaukta, pakeista, sukurta, sunaikinta, išsiųsta, atnaujinta. Įvykių pavadinimai gali atrodyti taip: ProfitAndLossStatementCreatedEvent, kuris reiškia, kad buvo sukurta finansinė ataskaita.

 klasė Reports::ProfitAndLossStatementCreatedEvent < PubSub::DomainEvent
   atributas :profit_and_loss_statement_id, Types::Strict::Integer
 end

Renginio leidėjas

Klasė, galinti skleisti įvykius. Pavyzdyje parodyta, kaip sukurti paslaugos ataskaitą. Sėkmingai sukūrus ataskaitą, išspinduliuojamas šios ataskaitos sukūrimo įvykis.

klasė 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

Įvykio tvarkyklė

Ši klasė turėtų būti vykdoma kaip atsakas į įvykio tvarkymą.

modulis Pranešimai
 klasė ReportsProfitAndLossStatementCreatedHandler < PubSub::DomainEventHandler
   def call
     ReportMailer.profit_and_loss_statement(profit_and_loss_statement).deliver_now
   end

   privatus

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

Prenumerata

Įvykiai su savo tvarkytojais susiejami per prenumeratas.

pranešimai:
 reports__profit_and_loss_statement_created: async

Naudojimo atvejų pavyzdžiai:

  • "Follow" funkcija socialiniuose tinkluose,
  • Daiktų internetas,
  • Siuntimas paštu,
  • Pranešimas apie sugeneruotus failus.

Panašūs modeliai

  1. EventBus - komponentai gali siųsti įvykius į "EventBus" nežinodami, kas juos priims ir kiek respondentų juos priims. reaguoti,
  2. Stebėtojas - subjektas turi priklausomų asmenų, vadinamų stebėtojais, sąrašą ir praneša jiems, kai pasikeičia jų būsena,
  3. Surinkimas - apklausos metu klientai periodiškai teiraujasi sistemos, ar yra naujų įvykių arba duomenų.

Brangakmeniai

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

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

  • https://github.com/stevo/pubsubsvetainėjebėgiai

Santrauka

"Pub/sub" nėra įprastas "Ruby in Rails" metodas. Kaip pristatoma straipsnyje, šis modelis gali duoti daug naudos projektui - dėl jo kodas gali būti švarus, paslaugos gali būti atskirtos ir lengvai keičiamos.

bendradarbiavimo vėliava

Susiję straipsniai

Programinės įrangos kūrimas

Rack vaidmuo "Ruby" ekosistemoje

Sužinokite daugiau apie stovo vaidmenį "Ruby" ekosistemoje iš mūsų eksperto ir patobulinkite savo "Ruby" žaidimo įgūdžius.

Nicolas Nisoria

Prenumeruokite mūsų žinių bazę ir būkite nuolat informuoti apie IT sektoriaus patirtį.

    Apie mus

    The Codest - tarptautinė programinės įrangos kūrimo bendrovė, turinti technologijų centrus Lenkijoje.

    Jungtinė Karalystė - būstinė

    • 303B biuras, 182-184 High Street North E6 2JA
      Londonas, Anglija

    Lenkija - vietiniai technologijų centrai

    • Fabryczna biurų parkas, Aleja
      Pokoju 18, 31-564 Krokuva
    • Brain Embassy, Konstruktorska
      11, 02-673 Varšuva, Lenkija

      The Codest

    • Pagrindinis
    • Apie mus
    • Paslaugos
    • Case Studies
    • Sužinokite, kaip
    • Karjera
    • Žodynas

      Paslaugos

    • Patariamoji tarnyba
    • Programinės įrangos kūrimas
    • Galinės dalies kūrimas
    • Priekinės dalies kūrimas
    • Staff Augmentation
    • Atgalinės versijos kūrėjai
    • Debesų inžinieriai
    • Duomenų inžinieriai
    • Kita
    • QA inžinieriai

      Ištekliai

    • Faktai ir mitai apie bendradarbiavimą su išoriniu programinės įrangos kūrimo partneriu
    • Iš JAV į Europą: Kodėl Amerikos startuoliai nusprendžia persikelti į Europą?
    • Technikos plėtros centrų užsienyje palyginimas: Tech Offshore Europa (Lenkija), ASEAN (Filipinai), Eurazija (Turkija)
    • Kokie yra svarbiausi CTO ir CIO iššūkiai?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Autorinės teisės © 2026 The Codest. Visos teisės saugomos.

    lt_LTLithuanian
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian es_ESSpanish nl_NLDutch etEstonian elGreek pt_PTPortuguese cs_CZCzech lvLatvian lt_LTLithuanian