window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(funktion () { var w = vindue if (w.LeadBooster) { console.warn('LeadBooster findes allerede') } 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 }) }, } } })() Få mere at vide om Ruby on Rails med Pub/Sub - The Codest
Codest
  • Om os
  • Serviceydelser
    • Udvikling af software
      • Frontend-udvikling
      • Backend-udvikling
    • Staff Augmentation
      • Frontend-udviklere
      • Backend-udviklere
      • Dataingeniører
      • Cloud-ingeniører
      • QA-ingeniører
      • Andet
    • Det rådgivende
      • Revision og rådgivning
  • Industrier
    • Fintech og bankvirksomhed
    • E-commerce
    • Adtech
    • Sundhedsteknologi
    • Produktion
    • Logistik
    • Biler
    • IOT
  • Værdi for
    • ADMINISTRERENDE DIREKTØR
    • CTO
    • Leder af levering
  • Vores team
  • Casestudier
  • Ved hvordan
    • Blog
    • Møder
    • Webinarer
    • Ressourcer
Karriere Tag kontakt til os
  • Om os
  • Serviceydelser
    • Udvikling af software
      • Frontend-udvikling
      • Backend-udvikling
    • Staff Augmentation
      • Frontend-udviklere
      • Backend-udviklere
      • Dataingeniører
      • Cloud-ingeniører
      • QA-ingeniører
      • Andet
    • Det rådgivende
      • Revision og rådgivning
  • Værdi for
    • ADMINISTRERENDE DIREKTØR
    • CTO
    • Leder af levering
  • Vores team
  • Casestudier
  • Ved hvordan
    • Blog
    • Møder
    • Webinarer
    • Ressourcer
Karriere Tag kontakt til os
Pil tilbage GÅ TILBAGE
2022-12-07
Udvikling af software

Få mere at vide om Ruby on Rails med Pub/Sub

Codest

Michal Pawlak

Senior Ruby-udvikler

Pub/Sub kan give mange fordele til projektet - det kan gøre koden ren, afkoble tjenester og gøre dem let skalerbare. Lær mere om Pub/Sub i den følgende artikel, og få dit projekt op i niveau!

Ruby on Rails (Rails, RoR) er en velkendt ramme til webapplikationer skrevet i Ruby programmeringssprog. Pub/Sub er et kort navn for softwaredesignmønstre kaldet Udgiv-abonnement. Jeg vil forklare, hvordan kommunikation mellem softwarekomponenter i Rails kan håndteres af Pub/Sub.

Hvad er Pub/sub?

Pub/sub er et softwaredesignmønster, der giver service-til-service-kommunikation. Service
indebærer en af de to roller: udgiver (som producerer) eller modtager (som forbruger). Hvad er
der skal forbruges, bestemmes som en begivenhed eller en besked eller en notifikation. I
I denne artikel bruges de i flæng om det samme.
Den tjeneste, der producerer, ved ikke, hvem der forbruger. Den tjeneste, der forbruger, ved ikke
kender beskedens oprindelse. De kan forblive ukendte for hinanden. Det er forskelligt fra
beskedkøer, hvor den komponent, der sender beskeden, ofte kender dens destination
- Denne måde at sende beskeder på giver dig mulighed for at sende beskeder hvor som helst. Denne mekanisme er en kerne
af Pub/sub og det betyder, at de er afkoblede.

For at udtrykke deres fælles interesser skal de have en fælles forståelse. Det er derfor,
Begge roller har en implicit stokkemekanisme, hvor producenten af en besked og modtageren af den
forbruger af meddelelsen mødes. Denne mekanisme kaldes emne, abonnement eller topic. Den er
ansvarlig for at kategorisere meddelelser til emner, er det i bund og grund et tilstandsløst meddelelsesfilter.
Emner fungerer som radiostationer. En udgiver producerer beskeden til emnet,
abonnenter modtager straks beskeden fra emnet. På grund af den afkoblede
tjenester, er den mest effektive måde at udveksle beskeder på at håndtere dem asynkront.

Rails uden Pub/Sub

Som standard er der ingen Rails-overhead for softwaredesignmønstre til overførsel af beskeder mellem komponenter. Udviklere bruger standard objektorienteret programmering (OOP)-paradigmet: sende parametre til funktioner, bede om klasser om værdier.

Når applikationen er ret ukompliceret, kan det være nok. Når applikationen vokser, skal nogle operationer f.eks. udføres asynkront, og så er projekt har brug for en abstraktion, som løser dette data-workflow. I stedet for at genopfinde hjulet kan udviklere implementere Pub/sub for at udfylde denne mangel på abstraktion.

Fordele ved Pub/Sub med Rails

  • Undgå tilbagekaldelser af aktive poster.
  • Ved at tilføje asynkron parallelbehandling til et system forbedres ydeevnen, pålideligheden og skalerbarheden.
  • Beskeder kan sendes asynkront til forskellige dele af systemet.
  • Giver mulighed for at sende beskeder asynkront til forskellige dele af et system.
  • Afkobling - tilføjelse eller ændring af en funktionalitet vil ikke påvirke noget, fordi Pub/Sub
    giver dig mulighed for at ændre, hvordan alting interagerer.
  • Beskedforbrugeren behøver ikke længere regelmæssigt at tjekke for opdateringer eller nye
    information. Det reducerer leveringsforsinkelsen, som kan være særligt problematisk i systemer
    uden tolerance over for forsinkelser.
  • Der er ingen grænse for, hvor mange abonnenter systemet kan håndtere, for det kan ændre sig,
    opgradere, formere sig eller forsvinde når som helst.

Ulemper ved Pub/Sub med Rails

  • Den største ulempe ved Pub/sub-systemer er deres afkobling af udgiver og
    abonnent.

Rails Pub/Sub introducerer

Eksempler på kilde i Rails blev skrevet ved hjælp af biblioteket
Pub/Sub på Rails (i Rubys nomenklatur kaldes et bibliotek for gem): Du finder flere detaljer i gem'ens readme. Implementeringen er sammensat af moduler:

  1. Domæne,
  2. Begivenhed,
  3. Hændelseshåndtering,
  4. Udgiver af begivenheden,
  5. Abonnement.

Domæne

Beskriver forretningslogik for at give kontekst til Pub/Sub og derfor gøre den ren. Kode.

 modul Notifikationer
   extend PubSub::Domæne
 slutning
 modul Rapporter
   extend PubSub::Domæne
 slut

Begivenhed

Det er en klasse, som beskriver, hvad der skete. Erklær klassens navn så selvbeskrivende med det, der skete, som muligt, for eksempel: annulleret, ændret, oprettet, ødelagt, sendt, opdateret. Begivenhedsnavne kan se ud som: ProfitAndLossStatementCreatedEvent, som betyder, at der blev oprettet et årsregnskab.

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

Udgiver af begivenheder

Klasse, der kan udsende hændelser. Eksemplet viser oprettelse af en servicerapport. Når rapporten er oprettet, udsendes hændelsen for oprettelsen af rapporten.

klasse Reports::ProfitAndLossStatementService
   inkluderer PubSub::Emit
    def udfør
     emit(:report_profit_and_loss_statement_created, profit_and_loss_statement_id: id) if result.ok?
   end
 end

Hændelseshåndtering

Denne klasse skal udføres som svar på håndtering af en hændelse.

modul Notifikationer
 class ReportsProfitAndLossStatementCreatedHandler < PubSub::DomainEventHandler
   def kald
     ReportMailer.profit_and_loss_statement(profit_and_loss_statement).deliver_now
   slut

   privat

   def opgørelse_overskud_og_tab
     ProfitAndLossStatement.find(event_data.profit_and_loss_statement_id)
   slut
 end
end

Abonnement

Begivenheder er bundet til deres behandlere gennem abonnementer.

meddelelser:
 reports__profit_and_loss_statement_created: async

Eksempler på brugsscenarier:

  • "Følg"-funktionen i sociale netværk,
  • Tingenes internet,
  • Mailing,
  • Meddelelse om genererede filer.

Lignende mønstre

  1. EventBus - komponenter kan sende begivenheder til EventBus uden at vide, hvem der samler dem op, eller hvor mange respondenter der reagerer,
  2. Observatør - opretholder subjektet en liste over afhængige personer, kaldet observatører, og giver dem besked, når deres tilstand ændres,
  3. Sammenlægning - Ved polling spørger klienter med jævne mellemrum systemet, om der er nye begivenheder eller data.

Ædelstene

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

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

  • https://github.com/stevo/pubsubpåSkinner

Sammenfatning

Pub/sub er ikke en almindelig tilgang i Ruby in Rails. Som introduceret i artiklen kan dette mønster give mange fordele til projektet - det kan gøre koden ren, afkoble tjenester og gøre dem let skalerbare.

Samarbejdsbanner

Relaterede artikler

Fintech

5 eksempler på den bedste brug af Ruby

Har du nogensinde undret dig over, hvad vi kan gøre med Ruby? Det er nok kun fantasien, der sætter grænser, men vi fortæller gerne om nogle mere eller mindre kendte tilfælde...

Codest
Pawel Muszynski Software Engineer
Udvikling af software

Rails-udvikling med TMUX, Vim, Fzf + Ripgrep

For et par år siden grillede jeg med nogle af mine venner, som alle var Java-udviklere. Jeg er ikke sikker på, hvordan det opstod, men vi begyndte at tale om vores kodemiljøer. I...

Codest
Marcin Doliwa Software Engineer
Udvikling af software

Produktudvikling: Python vs. Ruby

Python og Ruby er begge de mest udbredte backend-programmeringssprog. Python er lidt mere populært og har en bredere anvendelse. Ruby giver dog også mange fordele og...

Codest
Kamil Ferens Chef for vækst
Udvikling af software

Ruby on Rails-modularisering med Packwerk Episode I

Mennesker har svært ved at se det store billede af et problem uden at bruge en masse tid og kræfter på det. Det sker især, når man arbejder med store og komplekse applikationer....

Nicolas Nisoria
Udvikling af software

Racks rolle i Ruby-økosystemet

Lær mere om rackets rolle i Rubys økosystem fra vores ekspert og opkvalificer dit ruby-spil.

Nicolas Nisoria

Tilmeld dig vores vidensbase, og hold dig opdateret om ekspertisen fra it-sektoren.

    Om os

    The Codest - International softwareudviklingsvirksomhed med tech-hubs i Polen.

    Storbritannien - Hovedkvarter

    • Kontor 303B, 182-184 High Street North E6 2JA
      London, England

    Polen - Lokale teknologiske knudepunkter

    • Fabryczna Office Park, Aleja
      Pokoju 18, 31-564 Kraków
    • Hjerneambassaden, Konstruktorska
      11, 02-673 Warszawa, Polen

      Codest

    • Hjem
    • Om os
    • Serviceydelser
    • Casestudier
    • Ved hvordan
    • Karriere
    • Ordbog

      Serviceydelser

    • Det rådgivende
    • Udvikling af software
    • Backend-udvikling
    • Frontend-udvikling
    • Staff Augmentation
    • Backend-udviklere
    • Cloud-ingeniører
    • Dataingeniører
    • Andet
    • QA-ingeniører

      Ressourcer

    • Fakta og myter om at samarbejde med en ekstern softwareudviklingspartner
    • Fra USA til Europa: Hvorfor beslutter amerikanske startups sig for at flytte til Europa?
    • Sammenligning af Tech Offshore-udviklingsknudepunkter: Tech Offshore Europa (Polen), ASEAN (Filippinerne), Eurasien (Tyrkiet)
    • Hvad er de største udfordringer for CTO'er og CIO'er?
    • Codest
    • Codest
    • Codest
    • Privacy policy
    • Vilkår for brug af hjemmesiden

    Copyright © 2025 af The Codest. Alle rettigheder forbeholdes.

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