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:
- Domēns,
- Pasākums,
- Notikumu apstrādātājs,
- Pasākuma izdevējs,
- 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
- EventBus - komponenti var sūtīt notikumus uz EventBus, nezinot, kas tos saņems vai cik respondentu tos saņems. reaģēt,
- Novērotājs - subjekts uztur atkarīgo personu sarakstu, ko sauc par novērotājiem, un informē tos, kad mainās to stāvoklis,
- Apvienošana - veicot aptauju, klienti periodiski jautā sistēmai, vai ir jauni notikumi vai dati.
Dārgakmeņi
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.
