window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', versión: 2, } ;(function () { var w = window if (w.LeadBooster) { console.warn('LeadBooster ya existe') } 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 }) }, } } })() Más información sobre Ruby on Rails con Pub/Sub - The Codest
The Codest
  • Quiénes somos
  • Servicios
    • Desarrollo de software
      • Desarrollo Frontend
      • Desarrollo backend
    • Staff Augmentation
      • Desarrolladores frontales
      • Desarrolladores de backend
      • Ingenieros de datos
      • Ingenieros de la nube
      • Ingenieros de control de calidad
      • Otros
    • Asesoramiento
      • Auditoría y consultoría
  • Industrias
    • Fintech y Banca
    • E-commerce
    • Adtech
    • Tecnología sanitaria
    • Fabricación
    • Logística
    • Automoción
    • IOT
  • Valor para
    • CEO
    • CTO
    • Gestor de entregas
  • Nuestro equipo
  • Case Studies
  • Saber cómo
    • Blog
    • Meetups
    • Seminarios en línea
    • Recursos
Carreras profesionales Póngase en contacto
  • Quiénes somos
  • Servicios
    • Desarrollo de software
      • Desarrollo Frontend
      • Desarrollo backend
    • Staff Augmentation
      • Desarrolladores frontales
      • Desarrolladores de backend
      • Ingenieros de datos
      • Ingenieros de la nube
      • Ingenieros de control de calidad
      • Otros
    • Asesoramiento
      • Auditoría y consultoría
  • Valor para
    • CEO
    • CTO
    • Gestor de entregas
  • Nuestro equipo
  • Case Studies
  • Saber cómo
    • Blog
    • Meetups
    • Seminarios en línea
    • Recursos
Carreras profesionales Póngase en contacto
Flecha atrás VOLVER
2022-12-07
Desarrollo de software

Más información sobre Ruby on Rails con Pub/Sub

The Codest

Michal Pawlak

Desarrollador Ruby senior

Pub/Sub puede aportar muchos beneficios al proyecto - puede hacer que el código sea limpio, desacoplar servicios y hacerlos fácilmente escalables. ¡Obtén más información sobre Pub/Sub en el siguiente artículo y sube de nivel tu proyecto!

Ruby on Rails (Rails, RoR) es un conocido marco de aplicaciones web escrito en el lenguaje de programación Ruby lenguaje de programación. Pub/Sub es un nombre abreviado de los patrones de diseño de software denominados Publicar-suscribir. Voy a explicar cómo la comunicación entre los componentes de software en Rails podría ser manejado por Pub / Sub.

¿Qué es Pub/sub?

Pub/sub es un patrón de diseño de software que proporciona comunicación de servicio a servicio. Servicio
implica uno de los dos papeles: editor (quien produce) o receptor (quien consume). ¿Cuál es
producido para ser consumido se determina como un evento o un mensaje o una notificación. En el
En el contexto de este artículo, se utilizan indistintamente para referirse a lo mismo.
El servicio que produce no sabe quién consume. El servicio que consume no
conocer el origen del mensaje. Pueden permanecer desconocidos entre sí. Es diferente de
colas de mensajes, en las que el componente que envía el mensaje suele conocer su destino
- Este estilo de mensajería permite enviar mensajes a cualquier lugar. Este mecanismo es un núcleo
de Pub/sub y significa que están desacoplados.

Para expresar sus intereses mutuos, deben compartir un entendimiento común. Por tanto,
ambos roles tienen implícito un mecanismo del stick donde el productor de un mensaje y el
consumidor del mensaje se reúnen. Este mecanismo se denomina asunto, suscripción o tema. Es
responsable de categorizar los mensajes a los sujetos, es esencialmente un filtro de mensajes sin estado.
Los temas actúan como emisoras. Un editor produce el mensaje para el tema,
los abonados reciben inmediatamente el mensaje del tema. Debido al desacoplamiento
la forma más eficaz de intercambiar mensajes es hacerlo de forma asíncrona.

Rails sin Pub/Sub

Por defecto, Rails no tiene sobrecarga de patrones de diseño de software para el paso de mensajes entre componentes. Los desarrolladores utilizan el estándar programación orientada a objetos (OOP): pasar parámetros a funciones, pedir clases sobre valores.

Cuando la aplicación es poco complicada, podría ser suficiente. Cuando la aplicación crece, por ejemplo, algunas operaciones deben realizarse de forma asíncrona, entonces el proyecto necesita una abstracción que resuelva ese flujo de datos. En lugar de reinventar la rueda, los desarrolladores pueden implementar Pub/sub para suplir esta falta de abstracción.

Ventajas de Pub/Sub con Rails

  • Evite las devoluciones de llamada de registros activos.
  • Al añadir el procesamiento paralelo asíncrono a un sistema, se mejoran el rendimiento, la fiabilidad y la escalabilidad.
  • Los mensajes pueden difundirse de forma asíncrona a distintas partes del sistema.
  • Permite emitir mensajes de forma asíncrona a diferentes partes de un sistema.
  • Desacoplamiento: añadir o cambiar una funcionalidad no afectará a nada porque Pub/Sub
    te permite modificar cómo interactúa todo.
  • El consumidor de mensajes ya no tendrá que comprobar periódicamente si hay actualizaciones o nuevas
    información. Reduce la latencia de entrega que puede ser especialmente problemática en sistemas
    sin tolerancia a los retrasos.
  • No hay límite para el número de abonados que puede manejar el sistema porque puede cambiar,
    actualizarse, multiplicarse o desaparecer en cualquier momento.

Contras de Pub/Sub con Rails

  • La principal desventaja de los sistemas Pub/sub es que desvinculan el editor de los usuarios.
    abonado.

Rails Pub/Sub introducir

Los ejemplos de código fuente en Rails se escribieron utilizando la librería
Pub/Sub en Rails (en la nomenclatura de Ruby, una biblioteca se llama gema): Encontrarás más detalles en el readme de la gema. La implementación se compone de módulos:

  1. Dominio,
  2. Evento,
  3. Controlador de eventos,
  4. Editor del evento,
  5. Suscripción.

Dominio

Describe la lógica de negocio con el fin de proporcionar contexto para Pub/Sub y, por lo tanto, hacer limpio código.

 módulo Notificaciones
   extend PubSub::Dominio
 end
 módulo Reports
   extend PubSub::Dominio
 end

Evento

Es una clase que describe lo sucedido. Declara el nombre de la clase como auto-descriptivo con lo sucedido como sea posible, por ejemplo: cancelado, cambiado, creado, destruido, enviado, actualizado. Los nombres de eventos pueden ser como ProfitAndLossStatementCreatedEvent, que significa que un estado financiero fue creado.

 clase Reports::ProfitAndLossStatementCreatedEvent < PubSub::DomainEvent
   atributo :profit_and_loss_statement_id, Types::Strict::Integer
 fin

Editor del evento

Clase capaz de emitir eventos. El ejemplo muestra la creación de un informe de servicio. Cuando el informe se ha creado correctamente, emite el evento de creación de dicho informe.

clase Reports::ProfitAndLossStatementService
   include PubSub::Emit
    def ejecutar
     emit(:informe_estado_de_ganancias_y_pérdidas_creado, estado_de_ganancias_y_pérdidas_id: id) if result.ok?
   end
 end

Controlador de eventos

Esta clase debe ejecutarse en respuesta a la gestión de un evento.

módulo Notificaciones
 class ReportsProfitAndLossStatementCreatedHandler < PubSub::DomainEventHandler
   def call
     ReportMailer.estado_ganancias_y_pérdidas(estado_ganancias_y_pérdidas).deliver_now
   end

   privado

   def declaración_de_ganancias_y_pérdidas
     ProfitAndLossStatement.find(event_data.profit_and_loss_statement_id)
   end
 end
end

Suscripción

Los eventos se vinculan a sus gestores mediante suscripciones.

notificaciones:
 reports__profit_and_loss_statement_created: async

Ejemplos de casos de uso:

  • Función "Seguir" en las redes sociales,
  • Internet de los objetos,
  • Correo,
  • Notificación sobre los archivos generados.

Patrones similares

  1. EventBus - Los componentes pueden enviar eventos a EventBus sin saber quién los recogerá ni cuántos encuestados reaccionarán,
  2. Observador - el sujeto mantiene una lista de dependientes, llamados observadores, y les notifica cada vez que cambia su estado,
  3. Puesta en común - al sondear, los clientes preguntan periódicamente al sistema si hay nuevos eventos o datos.

Gemas

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

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

  • https://github.com/stevo/pubsubenraíles

Resumen

Pub/sub no es un enfoque común en Ruby in Rails. Tal y como se introduce en el artículo, este patrón puede aportar muchos beneficios al proyecto: puede hacer que el código sea limpio, desacoplar servicios y hacerlos fácilmente escalables.

bandera de cooperación

Artículos relacionados

Fintech

5 ejemplos del mejor uso de Ruby

¿Te has preguntado alguna vez qué podemos hacer con Ruby? Bueno, el cielo es probablemente el límite, pero estaremos encantados de hablar de algunos casos más o menos conocidos...

The Codest
Pawel Muszynski Software Engineer
Desarrollo de software

Desarrollo Rails con TMUX, Vim, Fzf + Ripgrep

Hace unos años, estaba charlando con unos amigos, todos desarrolladores de Java. No sé cómo surgió el tema, pero empezamos a hablar de nuestros entornos de codificación. I...

The Codest
Marcin Doliwa Software Engineer
Desarrollo de software

Desarrollo de productos: Python frente a Ruby

Python y Ruby son los lenguajes de programación backend más utilizados. Python es un poco más popular y tiene una aplicación más amplia. Sin embargo, Ruby también aporta muchas ventajas y...

The Codest
Kamil Ferens Director de Crecimiento
Desarrollo de software

Ruby on Rails modularización con Packwerk Episodio I

A los humanos nos resulta difícil ver el panorama general de un problema sin dedicarle mucho tiempo y esfuerzo. Esto ocurre especialmente cuando se trabaja con aplicaciones grandes y complejas....

Nicolas Nisoria
Desarrollo de software

El papel de Rack en el ecosistema Ruby

Aprenda más sobre el papel del rack en el ecosistema de Ruby de la mano de nuestro experto y mejore sus habilidades con Ruby.

Nicolas Nisoria

Suscríbase a nuestra base de conocimientos y manténgase al día de la experiencia del sector informático.

    Quiénes somos

    The Codest - Empresa internacional de desarrollo de software con centros tecnológicos en Polonia.

    Reino Unido - Sede central

    • Oficina 303B, 182-184 High Street North E6 2JA
      Londres, Inglaterra

    Polonia - Centros tecnológicos locales

    • Parque de oficinas Fabryczna, Aleja
      Pokoju 18, 31-564 Cracovia
    • Embajada del Cerebro, Konstruktorska
      11, 02-673 Varsovia, Polonia

      The Codest

    • Inicio
    • Quiénes somos
    • Servicios
    • Case Studies
    • Saber cómo
    • Carreras profesionales
    • Diccionario

      Servicios

    • Asesoramiento
    • Desarrollo de software
    • Desarrollo backend
    • Desarrollo Frontend
    • Staff Augmentation
    • Desarrolladores de backend
    • Ingenieros de la nube
    • Ingenieros de datos
    • Otros
    • Ingenieros de control de calidad

      Recursos

    • Hechos y mitos sobre la cooperación con un socio externo de desarrollo de software
    • De EE.UU. a Europa: ¿Por qué las startups estadounidenses deciden trasladarse a Europa?
    • Comparación de los polos de desarrollo de Tech Offshore: Tech Offshore Europa (Polonia), ASEAN (Filipinas), Eurasia (Turquía)
    • ¿Cuáles son los principales retos de los CTO y los CIO?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Condiciones de uso del sitio web

    Copyright © 2025 por The Codest. Todos los derechos reservados.

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