window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = finestra if (w.LeadBooster) { console.warn('LeadBooster esiste già') } 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 }) }, } } })() Ulteriori informazioni su Ruby on Rails con Pub/Sub - The Codest
The Codest
  • Chi siamo
  • Servizi
    • Sviluppo di software
      • Sviluppo Frontend
      • Sviluppo backend
    • Staff Augmentation
      • Sviluppatori Frontend
      • Sviluppatori backend
      • Ingegneri dei dati
      • Ingegneri del cloud
      • Ingegneri QA
      • Altro
    • Consulenza
      • Audit e consulenza
  • Industrie
    • Fintech e banche
    • E-commerce
    • Adtech
    • Tecnologia della salute
    • Produzione
    • Logistica
    • Automotive
    • IOT
  • Valore per
    • CEO
    • CTO
    • Responsabile della consegna
  • Il nostro team
  • Case Studies
  • Sapere come
    • Blog
    • Incontri
    • Webinar
    • Risorse
Carriera Contattate
  • Chi siamo
  • Servizi
    • Sviluppo di software
      • Sviluppo Frontend
      • Sviluppo backend
    • Staff Augmentation
      • Sviluppatori Frontend
      • Sviluppatori backend
      • Ingegneri dei dati
      • Ingegneri del cloud
      • Ingegneri QA
      • Altro
    • Consulenza
      • Audit e consulenza
  • Valore per
    • CEO
    • CTO
    • Responsabile della consegna
  • Il nostro team
  • Case Studies
  • Sapere come
    • Blog
    • Incontri
    • Webinar
    • Risorse
Carriera Contattate
Freccia indietro TORNA INDIETRO
2022-12-07
Sviluppo di software

Ulteriori informazioni su Ruby on Rails con Pub/Sub

The Codest

Michal Pawlak

Sviluppatore Ruby senior

Pub/Sub può portare molti vantaggi al progetto: può rendere il codice pulito, disaccoppiare i servizi e renderli facilmente scalabili. Scoprite di più su Pub/Sub nel seguente articolo e migliorate il vostro progetto!

Ruby on Rails (Rails, RoR) è un noto framework per applicazioni web scritto nel linguaggio Rubino linguaggio di programmazione. Pub/Sub è un nome abbreviato di modelli di progettazione del software chiamati Pubblicare-sottoscrivere. Spiegherò come la comunicazione tra componenti software in Rails possa essere gestita da Pub/Sub.

Che cos'è Pub/sub?

Pub/sub è un modello di progettazione del software che prevede la comunicazione da servizio a servizio. Servizio
comporta uno dei due ruoli: editore (chi produce) o destinatario (chi consuma). Che cosa è
prodotto da consumare è determinato come un evento o un messaggio o una notifica. Nella
Nel contesto di questo articolo, i due termini sono usati in modo intercambiabile per indicare la stessa cosa.
Il servizio che produce non sa chi consuma. Il servizio che consuma non
conoscere l'origine del messaggio. Possono rimanere sconosciuti l'uno all'altro. È diverso da
code di messaggi, in cui il componente che invia il messaggio spesso conosce la sua destinazione
- Questo stile di messaggistica consente di inviare messaggi ovunque. Questo meccanismo è un elemento fondamentale
di Pub/sub e significa che sono disaccoppiati.

Per esprimere i loro interessi reciproci, devono condividere una comprensione comune. Pertanto,
entrambi i ruoli hanno un meccanismo implicito di bastone dove il produttore di un messaggio e il
consumatore del messaggio incontrato. Questo meccanismo è chiamato soggetto, sottoscrizione o argomento. È
responsabile della categorizzazione dei messaggi ai soggetti, è essenzialmente un filtro di messaggi senza stato.
I temi agiscono come stazioni di trasmissione. Un editore produce il messaggio per l'argomento,
gli abbonati ricevono immediatamente il messaggio dall'argomento. A causa del disaccoppiamento
il modo più efficiente di scambiare messaggi è quello di gestirli in modo asincrono.

Rails senza Pub/Sub

Per impostazione predefinita, non esiste un overhead di Rails per i modelli di progettazione del software per il passaggio dei messaggi tra i componenti. Gli sviluppatori usano lo standard programmazione orientata agli oggetti (OOP): passaggio di parametri alle funzioni, richiesta di classi sui valori.

Quando l'applicazione è piuttosto semplice, potrebbe essere sufficiente. Quando l'applicazione cresce, ad esempio, alcune operazioni devono essere eseguite in modo asincrono, allora l'opzione progetto ha bisogno di un'astrazione che risolva il flusso di dati. Invece di reinventare la ruota, gli sviluppatori possono implementare Pub/sub per colmare questa mancanza di astrazione.

Pro di Pub/Sub con Rails

  • Evitare i callback dei record attivi.
  • Aggiungendo l'elaborazione parallela asincrona a un sistema, si migliorano le prestazioni, l'affidabilità e la scalabilità.
  • I messaggi possono essere trasmessi in modo asincrono a diverse parti del sistema.
  • Permette di trasmettere messaggi in modo asincrono a diverse parti di un sistema.
  • Disaccoppiamento: l'aggiunta o la modifica di una funzionalità non avrà alcun impatto perché Pub/Sub
    permette di modificare il modo in cui tutto interagisce.
  • L'utente del messaggio non dovrà più verificare periodicamente la presenza di aggiornamenti o di nuove
    informazioni. Riduce la latenza di consegna, che può risultare particolarmente problematica nei sistemi
    senza alcuna tolleranza per i ritardi.
  • Non c'è limite al numero di abbonati che il sistema può gestire, perché può cambiare,
    aggiornarsi, moltiplicarsi o scomparire in qualsiasi momento.

Contro di Pub/Sub con Rails

  • Il principale svantaggio dei sistemi Pub/sub è il disaccoppiamento tra l'editore e l'utente.
    abbonato.

Rails Pub/Sub introduce

Gli esempi di sorgente in Rails sono stati scritti utilizzando la libreria
Pub/Sub su Rails (nella nomenclatura di Ruby, una libreria è chiamata gemma): Maggiori dettagli si trovano nel readme della gemma. L'implementazione è composta da moduli:

  1. Dominio,
  2. Evento,
  3. Gestore dell'evento,
  4. Editore dell'evento,
  5. Abbonamento.

Dominio

Descrive la logica di business per fornire un contesto a Pub/Sub e, quindi, per rendere più pulito il sistema. codice.

 modulo Notifiche
   estendere PubSub::Domain
 fine
 modulo Rapporti
   estendere PubSub::Domain
 fine

Evento

È una classe che descrive ciò che è accaduto. Il nome della classe deve essere il più possibile autodescrittivo dell'evento, ad esempio: cancellato, modificato, creato, distrutto, inviato, aggiornato. I nomi degli eventi possono essere simili a: ProfitAndLossStatementCreatedEvent, che significa che è stato creato un rendiconto finanziario.

 class Reports::ProfitAndLossStatementCreatedEvent < PubSub::DomainEvent
   attributo :profit_and_loss_statement_id, Types::Strict::Integer
 fine

Editore dell'evento

Classe in grado di emettere eventi. L'esempio mostra la creazione di un rapporto di servizio. Quando il report è stato creato con successo, emette l'evento di creazione del report.

classe Reports::ProfitAndLossStatementService
   include PubSub::Emit
    def eseguire
     emit(:report_profit_and_loss_statement_created, profit_and_loss_statement_id: id) if result.ok?
   fine
 fine

Gestore dell'evento

Questa classe deve essere eseguita in risposta alla gestione di un evento.

modulo Notifiche
 classe ReportsProfitAndLossStatementCreatedHandler < PubSub::DomainEventHandler
   def chiama
     ReportMailer.profit_and_loss_statement(profit_and_loss_statement).deliver_now
   fine

   privato

   def dichiarazione_profitto_e_perdita
     ProfitAndLossStatement.find(event_data.profit_and_loss_statement_id)
   fine
 fine
fine

Abbonamento

Gli eventi sono legati ai loro gestori tramite sottoscrizioni.

notifiche:
 reports__profit_and_loss_statement_created: async

Esempi di casi d'uso:

  • Funzione "Segui" nei social network,
  • Internet degli oggetti,
  • Mailing,
  • Notifica dei file generati.

Modelli simili

  1. EventoBus - I componenti possono inviare eventi a EventBus senza sapere chi li raccoglierà o quanti rispondenti reagiranno,
  2. Osservatore - il soggetto mantiene un elenco di persone dipendenti, chiamate osservatori, e le notifica ogni volta che il loro stato cambia,
  3. Messa in comune - In fase di polling, i client chiedono periodicamente al sistema se ci sono nuovi eventi o dati.

Gemme

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

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

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

Sintesi

Pub/sub non è un approccio comune in Ruby in Rails. Come introdotto nell'articolo, questo pattern può portare molti vantaggi al progetto: può rendere il codice pulito, disaccoppiare i servizi e renderli facilmente scalabili.

banner di cooperazione

Articoli correlati

Fintech

5 esempi di utilizzo ottimale di Ruby

Vi siete mai chiesti cosa possiamo fare con Ruby? Beh, il cielo è probabilmente il limite, ma siamo felici di parlare di alcuni casi più o meno noti...

The Codest
Pawel Muszynski Software Engineer
Sviluppo di software

Sviluppo di Rails con TMUX, Vim, Fzf + Ripgrep

Qualche anno fa, stavo facendo una grigliata con alcuni amici, tutti sviluppatori Java. Non so come sia venuto fuori, ma abbiamo iniziato a parlare dei nostri ambienti di codifica. I...

The Codest
Marcin Doliwa Software Engineer
Sviluppo di software

Sviluppo del prodotto: Python vs. Ruby

Python e Ruby sono entrambi i linguaggi di programmazione backend più utilizzati. L'Python è un po' più popolare e ha un'applicazione più ampia. Tuttavia, anche Ruby offre molti vantaggi e...

The Codest
Kamil Ferens Responsabile della crescita
Sviluppo di software

Modularizzazione della Ruby on Rails con Packwerk Episodio I

Gli esseri umani hanno difficoltà a vedere il quadro generale di un problema senza dedicare molto tempo e sforzi. Questo accade soprattutto quando si lavora con applicazioni grandi e complesse....

Nicolas Nisoria
Sviluppo di software

Il ruolo di Rack nell'ecosistema Ruby

Scoprite il ruolo del rack nell'ecosistema di Ruby grazie al nostro esperto e migliorate il vostro gioco con Ruby.

Nicolas Nisoria

Iscrivetevi alla nostra knowledge base e rimanete aggiornati sulle competenze del settore IT.

    Chi siamo

    The Codest - Società internazionale di sviluppo software con centri tecnologici in Polonia.

    Regno Unito - Sede centrale

    • Ufficio 303B, 182-184 High Street North E6 2JA
      Londra, Inghilterra

    Polonia - Poli tecnologici locali

    • Parco uffici Fabryczna, Aleja
      Pokoju 18, 31-564 Cracovia
    • Ambasciata del cervello, Konstruktorska
      11, 02-673 Varsavia, Polonia

      The Codest

    • Casa
    • Chi siamo
    • Servizi
    • Case Studies
    • Sapere come
    • Carriera
    • Dizionario

      Servizi

    • Consulenza
    • Sviluppo di software
    • Sviluppo backend
    • Sviluppo Frontend
    • Staff Augmentation
    • Sviluppatori backend
    • Ingegneri del cloud
    • Ingegneri dei dati
    • Altro
    • Ingegneri QA

      Risorse

    • Fatti e miti sulla collaborazione con un partner esterno per lo sviluppo di software
    • Dagli Stati Uniti all'Europa: Perché le startup americane decidono di trasferirsi in Europa
    • Confronto tra gli hub di sviluppo Tech Offshore: Tech Offshore Europa (Polonia), ASEAN (Filippine), Eurasia (Turchia)
    • Quali sono le principali sfide di CTO e CIO?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Condizioni di utilizzo del sito web

    Copyright © 2025 di The Codest. Tutti i diritti riservati.

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