window.pipedriveLeadboosterConfig = { basis: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', versie: 2, } ;(functie () { var w = venster als (w.LeadBooster) { console.warn('LeadBooster bestaat al') } anders { w.LeadBooster = { q: [], on: functie (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: functie (n) { this.q.push({ t: 't', n: n }) }, } } })() Meer informatie over Ruby on Rails met Pub/Sub - The Codest
The Codest
  • Over ons
  • Diensten
    • Software Ontwikkeling
      • Frontend ontwikkeling
      • Backend ontwikkeling
    • Staff Augmentation
      • Frontend ontwikkelaars
      • Backend ontwikkelaars
      • Gegevensingenieurs
      • Cloud Ingenieurs
      • QA ingenieurs
      • Andere
    • Het advies
      • Audit & Consulting
  • Industrie
    • Fintech & Bankieren
    • E-commerce
    • Adtech
    • Gezondheidstechnologie
    • Productie
    • Logistiek
    • Automotive
    • IOT
  • Waarde voor
    • CEO
    • CTO
    • Leveringsmanager
  • Ons team
  • Case Studies
  • Weten hoe
    • Blog
    • Ontmoetingen
    • Webinars
    • Bronnen
Carrière Neem contact op
  • Over ons
  • Diensten
    • Software Ontwikkeling
      • Frontend ontwikkeling
      • Backend ontwikkeling
    • Staff Augmentation
      • Frontend ontwikkelaars
      • Backend ontwikkelaars
      • Gegevensingenieurs
      • Cloud Ingenieurs
      • QA ingenieurs
      • Andere
    • Het advies
      • Audit & Consulting
  • Waarde voor
    • CEO
    • CTO
    • Leveringsmanager
  • Ons team
  • Case Studies
  • Weten hoe
    • Blog
    • Ontmoetingen
    • Webinars
    • Bronnen
Carrière Neem contact op
Pijl terug KEREN TERUG
2022-12-07
Software Ontwikkeling

Meer informatie over Ruby on Rails met Pub/Sub

The Codest

Michal Pawlak

Senior Ruby Ontwikkelaar

Pub/Sub kan veel voordelen opleveren voor een project - het kan de code opschonen, services ontkoppelen en ze eenvoudig schaalbaar maken. Leer meer over Pub/Sub in het volgende artikel en verbeter je project!

Ruby on Rails (Rails, RoR) is een bekend raamwerk voor webtoepassingen geschreven in het Ruby programmeertaal. Pub/Sub is een afkorting van software ontwerppatronen genaamd Publiceren-afmelden. Ik zal uitleggen hoe communicatie tussen software componenten in Rails kan worden afgehandeld door Pub/Sub.

Wat is Pub/sub?

Pub/sub is een software-ontwerppatroon dat voorziet in service-naar-service communicatie. Service
houdt een van de twee rollen in: uitgever (die produceert) of ontvanger (die consumeert). Wat is
geproduceerd om te worden geconsumeerd, wordt bepaald als een gebeurtenis, een bericht of een melding. In de
In de context van dit artikel worden ze door elkaar gebruikt om naar hetzelfde te verwijzen.
De dienst die produceert weet niet wie consumeert. De dienst die consumeert weet niet
de oorsprong van het bericht kennen. Ze kunnen onbekend blijven voor elkaar. Dit is anders dan
wachtrijen voor berichten, waarbij de component die het bericht verzendt vaak de bestemming kent
- Met deze manier van berichten versturen kun je overal berichten naartoe sturen. Dit mechanisme is een kern
van Pub/sub en het betekent dat ze ontkoppeld zijn.

Om hun wederzijdse belangen tot uitdrukking te brengen, moeten ze een gemeenschappelijk begrip delen. Daarom,
beide rollen hebben een impliciet mechanisme van de stok waarbij de producent van een bericht en de
consument van het bericht ontmoeten. Dit mechanisme wordt onderwerp, abonnement of topic genoemd. Het is
verantwoordelijk voor het categoriseren van berichten naar onderwerpen, het is in wezen een stateloos berichtfilter.
Onderwerpen fungeren als zendstations. Een uitgever stuurt het bericht naar het onderwerp,
abonnees ontvangen onmiddellijk het bericht van het onderwerp. Vanwege de ontkoppelde
diensten is de meest efficiënte manier om berichten uit te wisselen om ze asynchroon af te handelen.

Rails zonder Pub/Sub

Standaard is er geen Rails-overhead voor software-ontwerppatronen voor het doorgeven van berichten tussen componenten. Ontwikkelaars gebruiken standaard objectgeoriënteerd programmeren (OOP) paradigma: parameters doorgeven aan functies, klassen vragen over waarden.

Als de applicatie vrij ongecompliceerd is, kan dit voldoende zijn. Als de applicatie groeit, bijvoorbeeld, moeten sommige bewerkingen asynchroon worden uitgevoerd, dan is de project abstractie nodig die die gegevensworkflow oplost. In plaats van het wiel opnieuw uit te vinden, kunnen ontwikkelaars het volgende implementeren Pub/sub om dit gebrek aan abstractie op te vullen.

Voordelen van Pub/Sub met Rails

  • Active Record Callbacks vermijden.
  • Door asynchrone parallelle verwerking aan een systeem toe te voegen, worden de prestaties, betrouwbaarheid en schaalbaarheid verbeterd.
  • Berichten kunnen asynchroon worden uitgezonden naar verschillende delen van het systeem.
  • Hiermee kunnen berichten asynchroon worden uitgezonden naar verschillende delen van een systeem.
  • Ontkoppeling - het toevoegen of wijzigen van een functionaliteit heeft geen invloed omdat Pub/Sub
    kun je aanpassen hoe alles op elkaar inwerkt.
  • De berichtenconsument hoeft niet langer periodiek te controleren op updates of nieuwe
    informatie. Het vermindert de afleverlatentie die vooral problematisch kan zijn in systemen
    zonder tolerantie voor vertragingen.
  • Er is geen limiet aan het aantal abonnees dat het systeem aankan, omdat het kan veranderen,
    upgraden, vermenigvuldigen of verdwijnen.

Nadelen van Pub/Sub met Rails

  • Het grote nadeel van Pub/Sub systemen is de ontkoppeling van uitgever en
    abonnee.

Rails Pub/Sub invoeren

Voorbeelden van broncode in Rails is geschreven met behulp van bibliotheek
Pub/Sub op Rails (in de nomenclatuur van Ruby wordt een bibliotheek gem genoemd): Meer details vind je in de readme van de gem. De implementatie bestaat uit modules:

  1. Domein,
  2. Evenement,
  3. Gebeurtenis handler,
  4. Uitgever,
  5. Inschrijving.

Domein

Beschrijft bedrijfslogica om Pub/Sub van context te voorzien en daardoor schoon te maken code.

 module Meldingen
   uitbreiden PubSub::Domein
 einde
 module Rapporten
   uitbreiden PubSub::Domein
 einde

Evenement

Het is een klasse die beschrijft wat er is gebeurd. Declareer de classnaam zo zelfbeschrijvend mogelijk met wat er is gebeurd, bijvoorbeeld: geannuleerd, gewijzigd, aangemaakt, vernietigd, verzonden, bijgewerkt. Namen van gebeurtenissen kunnen er als volgt uitzien: ProfitAndLossStatementCreatedEvent, wat betekent dat er een financieel overzicht is aangemaakt.

 klasse Reports::ProfitAndLossStatementCreatedEvent < PubSub::DomainEvent
   attribuut :profit_and_loss_statement_id, Types::Strict::Integer
 einde

Evenement uitgever

Klasse die gebeurtenissen kan uitzenden. Het voorbeeld toont het maken van een servicerapport. Als het rapport met succes is gemaakt, wordt de gebeurtenis voor het maken van dat rapport uitgezonden.

klasse rapporten::winst-en-verliesrekening service
   include PubSub::Emit
    def uitvoeren
     emit(:report_profit_and_loss_statement_created, profit_and_loss_statement_id: id) if result.ok?
   einde
 einde

Gebeurtenis handler

Deze klasse moet worden uitgevoerd als reactie op het afhandelen van een gebeurtenis.

module Meldingen
 Klasse ReportsProfitAndLossStatementCreatedHandler < PubSub::DomainEventHandler
   def oproep
     ReportMailer.profit_and_loss_statement(profit_and_loss_statement).deliver_now
   einde

   privé

   def winst_en_verlies_statement
     ProfitAndLossStatement.find(event_data.profit_and_loss_statement_id)
   einde
 einde
einde

Abonnement

Gebeurtenissen zijn gebonden aan hun afhandelaars door middel van abonnementen.

meldingen:
 reports__profit_and_loss_statement_created: async

Voorbeeldgebruiksgevallen:

  • "Volgfunctie in sociale netwerken,
  • Internet der dingen,
  • Mailing,
  • Melding over gegenereerde bestanden.

Vergelijkbare patronen

  1. EventBus - Componenten kunnen gebeurtenissen naar EventBus sturen zonder te weten wie ze zal oppikken of hoeveel respondenten zullen reageren,
  2. Waarnemer - het subject onderhoudt een lijst van afhankelijke personen, waarnemers genaamd, en stelt ze op de hoogte wanneer hun toestand verandert,
  3. Pooling - Bij polling vragen clients periodiek aan het systeem of er nieuwe gebeurtenissen of gegevens zijn.

Juwelen

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

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

  • https://github.com/stevo/pubsuboprails

Samenvatting

Pub/sub is geen gebruikelijke aanpak in Ruby in Rails. Zoals geïntroduceerd in het artikel, kan dit patroon veel voordelen opleveren voor het project - het kan de code schoon maken, services ontkoppelen en ze gemakkelijk schaalbaar maken.

vaandel samenwerking

Verwante artikelen

Fintech

5 voorbeelden van het beste gebruik van Ruby

Heb je je ooit afgevraagd wat we met Ruby kunnen doen? Nou, de sky is waarschijnlijk de limit, maar we praten graag over een aantal min of meer bekende gevallen...

The Codest
Pawel Muszynski Software Engineer
Software Ontwikkeling

Rails ontwikkelen met TMUX, Vim, Fzf + Ripgrep

Een paar jaar geleden was ik aan het grillen met een paar vrienden van me, allemaal Java-ontwikkelaars. Ik weet niet zeker hoe het ter sprake kwam, maar we begonnen te praten over onze codeeromgevingen. I...

The Codest
Marcin Doliwa Software Engineer
Software Ontwikkeling

Productontwikkeling: Python vs. Ruby

Python en Ruby zijn beide de meest gebruikte backend programmeertalen. Python is iets populairder en heeft een bredere toepassing. Ruby heeft echter ook veel voordelen en...

The Codest
Kamil Ferens Hoofd groei
Software Ontwikkeling

Ruby on Rails modularisatie met Packwerk Aflevering I

Mensen vinden het moeilijk om het grote plaatje van een probleem te zien zonder er veel tijd en moeite in te steken. Dit gebeurt vooral bij het werken met grote en complexe toepassingen....

Nicolas Nisoria
Software Ontwikkeling

De rol van Rack in het Ruby-ecosysteem

Leer meer over de rol van rack in het ecosysteem van Ruby van onze expert en verbeter je ruby spel.

Nicolas Nisoria

Abonneer je op onze kennisbank en blijf op de hoogte van de expertise uit de IT-sector.

    Over ons

    The Codest - Internationaal softwareontwikkelingsbedrijf met technische hubs in Polen.

    Verenigd Koninkrijk - Hoofdkantoor

    • Kantoor 303B, 182-184 High Street North E6 2JA
      Londen, Engeland

    Polen - Lokale technologieknooppunten

    • Fabryczna kantorenpark, Aleja
      Pokoju 18, 31-564 Krakau
    • Hersenambassade, Konstruktorska
      11, 02-673 Warschau, Polen

      The Codest

    • Home
    • Over ons
    • Diensten
    • Case Studies
    • Weten hoe
    • Carrière
    • Woordenboek

      Diensten

    • Het advies
    • Software Ontwikkeling
    • Backend ontwikkeling
    • Frontend ontwikkeling
    • Staff Augmentation
    • Backend ontwikkelaars
    • Cloud Ingenieurs
    • Gegevensingenieurs
    • Andere
    • QA ingenieurs

      Bronnen

    • Feiten en fabels over samenwerken met een externe partner voor softwareontwikkeling
    • Van de VS naar Europa: Waarom Amerikaanse startups besluiten naar Europa te verhuizen
    • Tech Offshore Ontwikkelingshubs Vergelijking: Tech Offshore Europa (Polen), ASEAN (Filippijnen), Eurazië (Turkije)
    • Wat zijn de grootste uitdagingen voor CTO's en CIO's?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Gebruiksvoorwaarden website

    Copyright © 2025 door The Codest. Alle rechten voorbehouden.

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