The Codest
  • Par mums
  • Pakalpojumi
    • Programmatūras izstrāde
      • Frontend izveide
      • Backend izstrāde
    • Staff Augmentation
      • Frontend izstrādātāji
      • Backend izstrādātāji
      • Datu inženieri
      • Mākoņa inženieri
      • QA inženieri
      • Citi
    • Tā Konsultatīvais dienests
      • Audits un konsultācijas
  • Nozares
    • Fintech un banku darbība
    • E-commerce
    • Adtech
    • Healthtech
    • Ražošana
    • Loģistika
    • Automobiļu nozare
    • IOT
  • Vērtība par
    • CEO
    • CTO
    • Piegādes vadītājs
  • Mūsu komanda
  • Case Studies
  • Zināt, kā
    • Blogs
    • Tikšanās
    • Tiešsaistes semināri
    • Resursi
Karjera Sazinieties ar mums
  • Par mums
  • Pakalpojumi
    • Programmatūras izstrāde
      • Frontend izveide
      • Backend izstrāde
    • Staff Augmentation
      • Frontend izstrādātāji
      • Backend izstrādātāji
      • Datu inženieri
      • Mākoņa inženieri
      • QA inženieri
      • Citi
    • Tā Konsultatīvais dienests
      • Audits un konsultācijas
  • Vērtība par
    • CEO
    • CTO
    • Piegādes vadītājs
  • Mūsu komanda
  • Case Studies
  • Zināt, kā
    • Blogs
    • Tikšanās
    • Tiešsaistes semināri
    • Resursi
Karjera Sazinieties ar mums
Atpakaļ bultiņa ATGRIEZTIES ATPAKAĻ
2022-12-07
Programmatūras izstrāde

Uzzināt vairāk par Ruby on Rails ar Pub/Sub

The Codest

Michal Pawlak

Vecākais Ruby programmētājs

Pub/Sub var sniegt projektam daudz priekšrocību - tas var padarīt kodu tīru, atsaistīt pakalpojumus un padarīt tos viegli mērogojamus. Uzziniet vairāk par Pub/Sub šajā rakstā un paaugstiniet sava projekta līmeni!

Rubīns vietnē Sliedes (Sliedes, RoR) ir labi zināms tīmekļa vietne lietojumprogrammu ietvarstruktūra, kas uzrakstīta lietojumprogrammā Rubīns programmēšanas valoda. Pub/Sub ir īss programmatūras dizaina modeļu nosaukums, ko sauc par Publicēt-abonēt. Es paskaidrošu, kā saziņu starp Rails programmatūras komponentēm var apstrādāt ar Pub/Sub.

Kas ir Pub/sub?

Pub/sub ir programmatūras projektēšanas modelis, kas nodrošina saziņu starp pakalpojumiem. Pakalpojums
ietver vienu no divām lomām: izdevējs (kas ražo) vai saņēmējs (kas patērē). Kas ir
tiek noteikts kā notikums, ziņojums vai paziņojums. In
Šajā rakstā tie tiek lietoti savstarpēji aizvietojami, lai apzīmētu vienu un to pašu.
Pakalpojums, kas ražo, nezina, kas patērē. Pakalpojums, kas patērē, nezina.
uzzināt ziņojuma izcelsmi. Viņi var palikt viens otram nezināmi. Tas atšķiras no
ziņojumu rindas, kur komponents, kas sūta ziņojumu, bieži vien zina tā galamērķi.
- šis ziņapmaiņas stils ļauj sūtīt ziņojumus jebkurā vietā. Šis mehānisms ir galvenais
no Pub/sub un tas nozīmē, ka tie ir atsaistīti.

Lai paustu abpusējas intereses, viņiem ir jābūt vienotai izpratnei. Tāpēc,
abām lomām ir netiešs "stick" mehānisms, kurā ziņojuma sagatavotājs un
satiekas ziņojuma patērētājs. Šo mehānismu sauc par tematu, abonementu vai tematu. Tas ir
atbildīgs par ziņojumu kategorizēšanu subjektiem, tas būtībā ir bezstāvokļa ziņojumu filtrs.
Tēmas darbojas kā apraides stacijas. Izdevējs sagatavo ziņu tēmai,
abonenti nekavējoties saņem ziņu no tēmas. Atdalītā
pakalpojumiem, visefektīvākais veids, kā apmainīties ar ziņojumiem, ir tos apstrādāt asinhroni.

Sliedes bez Pub/Sub

Pēc noklusējuma nav Rails uzcenojumu programmatūras dizaina paraugiem ziņojumu nodošanai starp komponentēm. Izstrādātāji izmanto standarta objektorientēta programmēšana (OOP) paradigma: parametru nodošana funkcijām, pieprasot klases par vērtībām.

Ja pieteikums ir diezgan vienkāršs, ar to var pietikt. Ja lietojumprogramma aug, piemēram, dažas operācijas ir jāveic asinhroni, tad projekts nepieciešama abstrakcija, kas atrisina šo dati darba plūsma. Tā vietā, lai no jauna izgudrotu riteni, izstrādātāji var īstenot Pub/sub aizpildīt šo abstrakcijas trūkumu.

Pub/Sub plusi ar Rails

  • Izvairieties no aktīvo ierakstu atpakaļsaukumiem.
  • Pievienojot sistēmai asinhrono paralēlo apstrādi, tiek uzlabota veiktspēja, uzticamība un uzticamība. mērogojamība ir uzlabotas.
  • Ziņojumus var pārraidīt asinhroni uz dažādām sistēmas daļām.
  • Ļauj asinhroni pārraidīt ziņojumus uz dažādām sistēmas daļām.
  • Atdalīšana - funkcionalitātes pievienošana vai maiņa neko neietekmēs, jo Pub/Sub
    ļauj mainīt visu elementu mijiedarbību.
  • Ziņu patērētājam vairs nebūs periodiski jāpārbauda, vai nav pieejami atjauninājumi vai jauni
    informācija. Tas samazina piegādes aizkavēšanos, kas var būt īpaši problemātiska sistēmās.
    bez iecietības pret kavējumiem.
  • Nav ierobežojuma, cik daudz abonentu sistēma var apkalpot, jo tas var mainīties,
    jebkurā laikā atjaunināt, pavairoties vai pazust.

Pub/Sub ar Rails trūkumi

  • Pub/sub sistēmu galvenais trūkums ir tas, ka tajās ir atdalīts izdevēja un apakšsistēmas.
    abonents.

Rails Pub/Sub ieviest

Rails avota piemēri tika rakstīts, izmantojot bibliotēku
Pub/Sub on Rails (Ruby nomenklatūrā bibliotēku sauc par gem): Sīkāku informāciju atradīsiet gem readme. Īstenošana sastāv no moduļiem:

  1. Domēns,
  2. Pasākums,
  3. Notikumu apstrādātājs,
  4. Pasākuma izdevējs,
  5. Abonēšana.

Domēns

Apraksta uzņēmējdarbības loģiku, lai nodrošinātu kontekstu Pub/Sub un tādējādi nodrošinātu tīrību. kods.

 modulis Paziņojumi
   paplašināt PubSub::Domain
 beigas
 modulis Ziņojumi
   paplašināt PubSub::Domain
 beigas

Pasākums

Tā ir klase, kas apraksta notikušo. Deklarējiet klases nosaukumu kā pašaprakstošu, pēc iespējas norādot, kas noticis, piemēram: atcelts, mainīts, izveidots, iznīcināts, nosūtīts, atjaunināts. Notikumu nosaukumi var izskatīties šādi: ProfitAndLossStatementCreatedEvent, kas nozīmē, ka tika izveidots finanšu pārskats.

 klase Reports::ProfitAndLossStatementCreatedEvent < PubSub::DomainEvent
   atribūts :profit_and_loss_statement_id, Types::Strict::Integer
 end

Pasākuma izdevējs

Klase, kas spēj emitēt notikumus. Šajā piemērā ir parādīta pakalpojuma ziņojuma izveide. Kad ziņojums ir veiksmīgi izveidots, tiek emitēts notikums par ziņojuma izveidošanu.

klase 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

Notikumu apstrādātājs

Šī klase jāizpilda, reaģējot uz notikuma apstrādi.

modulis Paziņojumi
 klase ReportsProfitAndLossStatementCreatedHandler < PubSub::DomainEventHandler
   def call
     ReportMailer.profit_and_loss_statement(profit_and_loss_statement).deliver_now
   end

   privāts

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

Abonements

Notikumi ir saistīti ar saviem apstrādātājiem, izmantojot abonementus.

paziņojumi:
 reports__profit_and_loss_statement_created: async

Lietošanas piemēri:

  • "Follow" funkcija sociālajos tīklos,
  • Lietu internets,
  • Nosūtīšana,
  • Paziņojums par ģenerētajiem failiem.

Līdzīgi modeļi

  1. EventBus - komponenti var sūtīt notikumus uz EventBus, nezinot, kas tos saņems vai cik respondentu tos saņems. reaģēt,
  2. Novērotājs - subjekts uztur atkarīgo personu sarakstu, ko sauc par novērotājiem, un informē tos, kad mainās to stāvoklis,
  3. Apvienošana - veicot aptauju, klienti periodiski jautā sistēmai, vai ir jauni notikumi vai dati.

Dārgakmeņi

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

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

  • https://github.com/stevo/pubsubvietnēsliedes

Kopsavilkums

Pub/sub nav izplatīta pieeja Ruby in Rails. Kā jau rakstā minēts, šis modelis projektam var dot daudz priekšrocību - tas var padarīt kodu tīru, atsaistīt pakalpojumus un padarīt tos viegli mērogojamus.

sadarbības baneris

Saistītie raksti

Programmatūras izstrāde

Rack loma Ruby ekosistēmā

Uzziniet vairāk par plauktu lomu Ruby ekosistēmā no mūsu eksperta un uzlabojiet savas rubīna spēles prasmes.

Nicolas Nisoria

Abonējiet mūsu zināšanu bāzi un saņemiet jaunāko informāciju par IT nozares pieredzi.

    Par mums

    The Codest - starptautisks programmatūras izstrādes uzņēmums ar tehnoloģiju centriem Polijā.

    Apvienotā Karaliste - Galvenā mītne

    • 303B birojs, 182-184 High Street North E6 2JA
      Londona, Anglija

    Polija - Vietējie tehnoloģiju centri

    • Fabryczna Office Park, Aleja
      Pokoju 18, 31-564 Krakova
    • Brain Embassy, Konstruktorska
      11, 02-673 Varšava, Polija

      The Codest

    • Sākums
    • Par mums
    • Pakalpojumi
    • Case Studies
    • Zināt, kā
    • Karjera
    • Vārdnīca

      Pakalpojumi

    • Tā Konsultatīvais dienests
    • Programmatūras izstrāde
    • Backend izstrāde
    • Frontend izveide
    • Staff Augmentation
    • Backend izstrādātāji
    • Mākoņa inženieri
    • Datu inženieri
    • Citi
    • QA inženieri

      Resursi

    • Fakti un mīti par sadarbību ar ārējo programmatūras izstrādes partneri
    • No ASV uz Eiropu: Kāpēc Amerikas jaunuzņēmumi nolemj pārcelties uz Eiropu?
    • Tehnoloģiju ārzonas attīstības centru salīdzinājums: Tech Offshore Eiropa (Polija), ASEAN (Filipīnas), Eirāzija (Turcija)
    • Kādi ir galvenie CTO un CIO izaicinājumi?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Autortiesības © 2026 The Codest. Visas tiesības aizsargātas.

    lvLatvian
    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 lt_LTLithuanian lvLatvian