window.pipedriveLeadboosterConfig = { bas: 'leadbooster-chat.pipedrive.com', företagId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(funktion () { var w = fönster if (w.LeadBooster) { console.warn('LeadBooster finns redan') } annars { w.LeadBooster = { q: [], on: funktion (n, h) { this.q.push({ t: "o", n: n, h: h }) }, trigger: funktion (n) { this.q.push({ t: 't', n: n }) }, } } })() Läs mer om Ruby on Rails med Pub/Sub - The Codest
Codest
  • Om oss
  • Tjänster
    • Utveckling av programvara
      • Frontend-utveckling
      • Backend-utveckling
    • Staff Augmentation
      • Frontend-utvecklare
      • Backend-utvecklare
      • Dataingenjörer
      • Ingenjörer inom molntjänster
      • QA-ingenjörer
      • Övriga
    • Det rådgivande
      • Revision och rådgivning
  • Industrier
    • Fintech & bankverksamhet
    • E-commerce
    • Adtech
    • Hälsoteknik
    • Tillverkning
    • Logistik
    • Fordon
    • IOT
  • Värde för
    • VD OCH KONCERNCHEF
    • CTO
    • Leveranschef
  • Vårt team
  • Fallstudier
  • Vet hur
    • Blogg
    • Möten
    • Webbinarier
    • Resurser
Karriär Ta kontakt med oss
  • Om oss
  • Tjänster
    • Utveckling av programvara
      • Frontend-utveckling
      • Backend-utveckling
    • Staff Augmentation
      • Frontend-utvecklare
      • Backend-utvecklare
      • Dataingenjörer
      • Ingenjörer inom molntjänster
      • QA-ingenjörer
      • Övriga
    • Det rådgivande
      • Revision och rådgivning
  • Värde för
    • VD OCH KONCERNCHEF
    • CTO
    • Leveranschef
  • Vårt team
  • Fallstudier
  • Vet hur
    • Blogg
    • Möten
    • Webbinarier
    • Resurser
Karriär Ta kontakt med oss
Pil tillbaka GÅ TILLBAKA
2022-12-07
Utveckling av programvara

Läs mer om Ruby on Rails med Pub/Sub

Codest

Michal Pawlak

Senior Ruby-utvecklare

Pub/Sub kan ge många fördelar för projektet - det kan göra koden ren, frikoppla tjänster och göra dem lätt skalbara. Lär dig mer om Pub/Sub i följande artikel och få ditt projekt att lyfta!

Ruby on Rails (Rails, RoR) är ett välkänt ramverk för webbapplikationer skrivet i Ruby programmeringsspråk. Pub/Sub är ett kort namn på designmönster för programvara som kallas Publicera och prenumerera. Jag ska förklara hur kommunikation mellan programvarukomponenter i Rails kan hanteras med Pub/Sub.

Vad är Pub/sub?

Pub/sub är ett designmönster för programvara som möjliggör kommunikation mellan tjänster. Tjänst
innebär en av de två rollerna: utgivare (som producerar) eller mottagare (som konsumerar). Vad är
som ska konsumeras bestäms som en händelse eller ett meddelande eller en notifiering. I
i denna artikel används de synonymt för att referera till samma sak.
Tjänsten som producerar vet inte vem som konsumerar. Tjänsten som konsumerar vet inte
känna till meddelandets ursprung. De kan förbli okända för varandra. Det skiljer sig från
meddelandeköer, där den komponent som skickar meddelandet ofta känner till dess destination
- Den här typen av meddelanden gör att du kan skicka meddelanden var som helst. Denna mekanism är en central
av Pub/sub och det betyder att de är frikopplade.

För att kunna uttrycka sina ömsesidiga intressen måste de ha en gemensam förståelse. Det är därför,
båda rollerna har en implicit pinnmekanism där producenten av ett meddelande och mottagaren av
konsument av meddelandet möts. Denna mekanism kallas ämne, prenumeration eller topic. Den är
ansvarar för att kategorisera meddelanden till ämnen, är det i huvudsak ett statlöst meddelandefilter.
Ämnen fungerar som sändningsstationer. En utgivare producerar meddelandet till ämnet,
prenumeranterna omedelbart får meddelandet från ämnet. På grund av den frikopplade
är det mest effektiva sättet att utbyta meddelanden att hantera dem asynkront.

Rails utan Pub/Sub

Som standard finns det ingen Rails-overhead för mjukvarudesignmönster för att skicka meddelanden mellan komponenter. Utvecklare använder standard objektorienterad programmering (OOP) paradigm: skicka parametrar till funktioner, fråga efter klasser om värden.

När applikationen är ganska okomplicerad kan det räcka. När applikationen växer, t.ex. när vissa operationer måste utföras asynkront, kan projekt behöver en abstraktion som löser detta dataarbetsflöde. Istället för att uppfinna hjulet på nytt kan utvecklare implementera Pub/sub för att fylla denna brist på abstraktion.

Fördelar med Pub/Sub med Rails

  • Undvik återkallelser i Active Record.
  • Genom att lägga till asynkron parallellbearbetning i ett system förbättras prestanda, tillförlitlighet och skalbarhet.
  • Meddelanden kan sändas asynkront till olika delar av systemet.
  • Gör det möjligt att sända meddelanden asynkront till olika delar av ett system.
  • Frikoppling - att lägga till eller ändra en funktion påverkar inte något annat eftersom Pub/Sub
    kan du ändra hur allt samverkar.
  • Meddelandekonsumenten behöver inte längre regelbundet kontrollera om det finns uppdateringar eller nya
    information. Det minskar leveransfördröjningen som kan vara särskilt problematisk i system
    med ingen tolerans för förseningar.
  • Det finns ingen gräns för hur många abonnenter systemet kan hantera eftersom det kan ändras,
    uppgraderas, mångfaldigas eller försvinna när som helst.

Nackdelar med Pub/Sub med Rails

  • Den största nackdelen med Pub/sub-system är att de inte kopplar ihop utgivare och
    abonnent.

Rails Pub/Sub införa

Exempel på källkod i Rails skrevs med hjälp av biblioteket
Pub/Sub på Rails (i Rubys nomenklatur kallas ett bibliotek för gem): Du hittar mer information i gemens readme. Implementeringen består av moduler:

  1. Domän,
  2. Händelse,
  3. Händelsehanterare,
  4. Utgivare av evenemang,
  5. Prenumeration.

Domän

Beskriver affärslogiken för att ge Pub/Sub ett sammanhang och därmed göra den ren kod.

 modul Meddelanden
   extend PubSub::Domän
 avsluta
 modul Rapporter
   extend PubSub::Domän
 avsluta

Händelse

Det är en klass som beskriver vad som hände. Deklarera klassnamnet så självbeskrivande med vad som hände som möjligt, till exempel: cancelled, changed, created, destroyed, sent, updated. Händelsenamn kan se ut som: ProfitAndLossStatementCreatedEvent, vilket innebär att en finansiell rapport skapades.

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

Utgivare av evenemang

Klass som kan avge händelser. Exemplet visar hur man skapar en servicerapport. När rapporten har skapats, emitterar du händelsen för att skapa rapporten.

class Reports::Vinst-och-förlustredovisningService
   inkluderar PubSub::Emit
    def exekvera
     emit(:report_profit_and_loss_statement_created, profit_and_loss_statement_id: id) if result.ok?
   end
 slut

Händelsehanterare

Denna klass bör exekveras som svar på hanteringen av en händelse.

modul Notifieringar
 class ReportsProfitAndLossStatementCreatedHandler < PubSub::DomainEventHandler
   def anrop
     ReportMailer.vinst_och_förlustutlåtande(vinst_och_förlustutlåtande).deliver_now
   slut

   privat

   def vinst_och_förlust_uttalande
     ProfitAndLossStatement.find(event_data.profit_and_loss_statement_id)
   slut
 slut
slut

Prenumeration

Händelser kopplas till sina hanterare genom prenumerationer.

meddelanden:
 rapporter__vinst_och_förlust_uträkning_skapad: async

Exempel på användningsområden:

  • "Följ"-funktionen i sociala nätverk,
  • Sakernas internet,
  • Mailing,
  • Meddelande om genererade filer.

Liknande mönster

  1. EventBus - komponenter kan skicka händelser till EventBus utan att veta vem som kommer att hämta dem eller hur många respondenter som kommer att reagera,
  2. Observatör - upprätthåller subjektet en lista över beroende parter, så kallade observatörer, och meddelar dem när deras tillstånd ändras,
  3. Poolning - Vid polling frågar klienterna regelbundet systemet om det finns några nya händelser eller data.

Ädelstenar

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

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

  • https://github.com/stevo/pubsubpåRäls

Sammanfattning

Pub/sub är inte ett vanligt tillvägagångssätt i Ruby in Rails. Som introduceras i artikeln kan detta mönster ge många fördelar för projektet - det kan göra koden ren, frikoppla tjänster och göra dem lätt skalbara.

samarbetsbanner

Relaterade artiklar

Fintech

5 exempel på hur Ruby används på bästa sätt

Har du någonsin undrat vad vi kan göra med Ruby? Tja, himlen är förmodligen gränsen, men vi är glada att prata om några mer eller mindre kända fall ...

Codest
Pawel Muszynski Software Engineer
Utveckling av programvara

Rails-utveckling med TMUX, Vim, Fzf + Ripgrep

För några år sedan grillade jag med några av mina vänner, alla Java-utvecklare. Jag är inte säker på hur det kom upp, men vi började prata om våra kodningsmiljöer. I...

Codest
Marcin Doliwa Software Engineer
Utveckling av programvara

Produktutveckling: Python vs. Ruby

Python och Ruby är båda de mest använda programmeringsspråken för backend. Python är lite mer populärt och har en bredare tillämpning. Men Ruby ger också många fördelar och ...

Codest
Kamil Ferens Chef för tillväxtavdelningen
Utveckling av programvara

Ruby on Rails Modularisering med Packwerk Avsnitt I

Människor har svårt att se helheten i ett problem utan att ägna mycket tid och kraft åt det. Detta händer särskilt när man arbetar med stora och komplexa applikationer. ....

Nicolas Nisoria
Utveckling av programvara

Racks roll i Rubys ekosystem

Lär dig mer om rackets roll i Rubys ekosystem från vår expert och förbättra din förmåga att spela Ruby.

Nicolas Nisoria

Prenumerera på vår kunskapsbas och håll dig uppdaterad om expertisen från IT-sektorn.

    Om oss

    The Codest - Internationellt mjukvaruutvecklingsföretag med teknikhubbar i Polen.

    Förenade kungariket - Huvudkontor

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

    Polen - Lokala tekniknav

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

      Codest

    • Hem
    • Om oss
    • Tjänster
    • Fallstudier
    • Vet hur
    • Karriär
    • Ordbok

      Tjänster

    • Det rådgivande
    • Utveckling av programvara
    • Backend-utveckling
    • Frontend-utveckling
    • Staff Augmentation
    • Backend-utvecklare
    • Ingenjörer inom molntjänster
    • Dataingenjörer
    • Övriga
    • QA-ingenjörer

      Resurser

    • Fakta och myter om att samarbeta med en extern partner för mjukvaruutveckling
    • Från USA till Europa: Varför väljer amerikanska startup-företag att flytta till Europa?
    • Jämförelse av Tech Offshore Development Hubs: Tech Offshore Europa (Polen), ASEAN (Filippinerna), Eurasien (Turkiet)
    • Vilka är de största utmaningarna för CTO:er och CIO:er?
    • Codest
    • Codest
    • Codest
    • Privacy policy
    • Användarvillkor för webbplatsen

    Copyright © 2025 av The Codest. Alla rättigheter reserverade.

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