The Codest
  • Sobre nós
  • Serviços
    • Desenvolvimento de software
      • Desenvolvimento de front-end
      • Desenvolvimento backend
    • Staff Augmentation
      • Programadores Frontend
      • Programadores de back-end
      • Engenheiros de dados
      • Engenheiros de nuvem
      • Engenheiros de GQ
      • Outros
    • Aconselhamento
      • Auditoria e consultoria
  • Indústrias
    • Fintech e Banca
    • E-commerce
    • Adtech
    • Tecnologia da saúde
    • Fabrico
    • Logística
    • Automóvel
    • IOT
  • Valor para
    • CEO
    • CTO
    • Gestor de entregas
  • A nossa equipa
  • Case Studies
  • Saber como
    • Blogue
    • Encontros
    • Webinars
    • Recursos
Carreiras Entrar em contacto
  • Sobre nós
  • Serviços
    • Desenvolvimento de software
      • Desenvolvimento de front-end
      • Desenvolvimento backend
    • Staff Augmentation
      • Programadores Frontend
      • Programadores de back-end
      • Engenheiros de dados
      • Engenheiros de nuvem
      • Engenheiros de GQ
      • Outros
    • Aconselhamento
      • Auditoria e consultoria
  • Valor para
    • CEO
    • CTO
    • Gestor de entregas
  • A nossa equipa
  • Case Studies
  • Saber como
    • Blogue
    • Encontros
    • Webinars
    • Recursos
Carreiras Entrar em contacto
Seta para trás VOLTAR
2022-12-07
Desenvolvimento de software

Saiba mais sobre o Ruby on Rails com Pub/Sub

The Codest

Michal Pawlak

Programador Ruby sénior

O Pub/Sub pode trazer muitos benefícios para o projeto - pode tornar o código limpo, dissociar serviços e torná-los facilmente escaláveis. Saiba mais sobre o Pub/Sub no artigo seguinte e eleve o nível do seu projeto!

Rubi sobre Carris (Rails, RoR) é uma conhecida estrutura de aplicações web escrita em Rubi linguagem de programação. Pub/Sub é uma designação abreviada dos padrões de conceção de software denominados Publicar-subscrever. Vou explicar como a comunicação entre componentes de software no Rails pode ser tratada pelo Pub/Sub.

O que é o Pub/sub?

Pub/sub é um padrão de conceção de software que permite a comunicação serviço-a-serviço. Serviço
implica um dos dois papéis: editor (que produz) ou recetor (que consome). O que é
produzido para ser consumido é determinado como um evento ou uma mensagem ou uma notificação. No
No contexto do presente artigo, são utilizados indistintamente para designar a mesma coisa.
O serviço que produz não sabe quem consome. O serviço que consome não
conhecem a origem da mensagem. Podem permanecer desconhecidos um para o outro. É diferente de
filas de mensagens, em que o componente que envia a mensagem conhece frequentemente o seu destino
- este estilo de envio de mensagens permite-lhe enviar mensagens para qualquer lugar. Este mecanismo é um dos principais
de Pub/sub e isso significa que estão dissociados.

Para exprimirem os seus interesses mútuos, devem partilhar um entendimento comum. Por conseguinte,
ambos os papéis têm um mecanismo implícito de "stick" em que o produtor de uma mensagem e o
consumidor da mensagem. Este mecanismo é designado por assunto, subscrição ou tópico. É
responsável pela categorização de mensagens para assuntos, é essencialmente um filtro de mensagens sem estado.
Os tópicos funcionam como estações de transmissão. Um editor produz a mensagem para o tópico,
os subscritores recebem imediatamente a mensagem do tópico. Devido ao facto de os
a forma mais eficiente de trocar mensagens é tratá-las de forma assíncrona.

Rails sem Pub/Sub

Por padrão, não há sobrecarga do Rails para padrões de design de software para passar mensagens entre componentes. Os desenvolvedores usam o padrão programação orientada para os objectos (OOP): passar parâmetros a funções, pedir classes sobre valores.

Quando a aplicação é bastante simples, pode ser suficiente. Quando a aplicação cresce, por exemplo, algumas operações precisam de ser efectuadas de forma assíncrona, então o projeto precisa de uma abstração que resolva esse fluxo de trabalho de dados. Em vez de reinventar a roda, os programadores podem implementar Pub/sub para colmatar esta falta de abstração.

Prós do Pub/Sub com Rails

  • Evitar as chamadas de retorno de registos activos.
  • Ao adicionar o processamento paralelo assíncrono a um sistema, o desempenho, a fiabilidade e a escalabilidade são melhorados.
  • As mensagens podem ser transmitidas de forma assíncrona para diferentes partes do sistema.
  • Permite que as mensagens sejam transmitidas de forma assíncrona para diferentes partes de um sistema.
  • Desacoplamento - adicionar ou alterar uma funcionalidade não terá impacto em nada porque Pub/Sub
    permite-lhe modificar a forma como tudo interage.
  • O consumidor de mensagens deixará de precisar de verificar periodicamente se existem actualizações ou novas
    informações. Reduz a latência de entrega que pode ser particularmente problemática em sistemas
    sem tolerância para atrasos.
  • Não há limite para o número de subscritores que o sistema pode suportar, porque este pode mudar,
    atualizar, multiplicar ou desaparecer em qualquer altura.

Contras do Pub/Sub com Rails

  • A principal desvantagem dos sistemas Pub/sub é a dissociação entre o editor e o
    assinante.

Introdução do Rails Pub/Sub

Exemplos de código fonte em Rails foram escritos usando a biblioteca
Pub/Sub em Rails (na nomenclatura do Ruby, uma biblioteca chama-se gem): Encontrará mais pormenores no readme da gem. A implementação é composta por módulos:

  1. Domínio,
  2. Evento,
  3. Manipulador de eventos,
  4. Editor do evento,
  5. Assinatura.

Domínio

Descreve a lógica comercial, a fim de fornecer contexto para Pub/Sub e, por conseguinte, tornar mais clara a sua utilização. código.

 módulo Notifications
   extend PubSub::Domínio
 fim
 módulo Relatórios
   estender PubSub::Domínio
 fim

Evento

Trata-se de uma classe que descreve o que aconteceu. Declare o nome da classe como auto-descritor do que aconteceu, por exemplo: cancelado, alterado, criado, destruído, enviado, atualizado. Os nomes dos eventos podem ser semelhantes a: ProfitAndLossStatementCreatedEvent, que significa que uma demonstração financeira foi criada.

 classe Reports::ProfitAndLossStatementCreatedEvent < PubSub::DomainEvent
   atributo :profit_and_loss_statement_id, Types::Strict::Integer
 fim

Editor de eventos

Classe capaz de emitir eventos. O exemplo mostra a criação de um relatório de serviço. Quando o relatório for criado com sucesso, emite o evento de criação desse relatório.

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

Manipulador de eventos

Esta classe deve ser executada em resposta ao tratamento de um evento.

módulo Notificações
 class ReportsProfitAndLossStatementCreatedHandler < PubSub::DomainEventHandler
   def call
     ReportMailer.profit_and_loss_statement(profit_and_loss_statement).deliver_now
   fim

   privado

   def profit_and_loss_statement
     ProfitAndLossStatement.find(event_data.profit_and_loss_statement_id)
   end
 end
end

Assinatura

Os eventos são ligados aos seus manipuladores através de subscrições.

notificações:
 reports__profit_and_loss_statement_created: async

Exemplos de casos de utilização:

  • Funcionalidade "Seguir" nas redes sociais,
  • Internet das coisas,
  • Correio eletrónico,
  • Notificação sobre ficheiros gerados.

Padrões semelhantes

  1. EventBus - os componentes podem enviar eventos para o EventBus sem saber quem os irá recolher ou quantos inquiridos irão reagir,
  2. Observador - o sujeito mantém uma lista de dependentes, chamados observadores, e notifica-os sempre que o seu estado se altera,
  3. Agrupamento - quando os clientes fazem polling, perguntam periodicamente ao sistema se existem novos eventos ou dados.

Gemas

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

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

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

Resumo

Pub/sub não é uma abordagem comum em Ruby in Rails. Como introduzido no artigo, este padrão pode trazer muitos benefícios para o projeto - pode tornar o código limpo, desacoplar serviços e torná-los facilmente escaláveis.

faixa de cooperação

Artigos relacionados

Fintech

5 exemplos da melhor utilização do Ruby

Já alguma vez pensou no que podemos fazer com Ruby? Bem, o céu é provavelmente o limite, mas temos todo o gosto em falar sobre alguns casos mais ou menos conhecidos...

The Codest
Pawel Muszynski Software Engineer
Desenvolvimento de software

Desenvolvimento Rails com TMUX, Vim, Fzf + Ripgrep

Há alguns anos, estava a fazer um churrasco com alguns dos meus amigos, todos programadores de Java. Não sei bem como surgiu o assunto, mas começámos a falar dos nossos ambientes de programação. I...

The Codest
Marcin Doliwa Software Engineer
Desenvolvimento de software

Desenvolvimento de produtos: Python vs. Ruby

Python e Ruby são as linguagens de programação backend mais utilizadas. A Python é um pouco mais popular e tem uma aplicação mais alargada. No entanto, o Ruby também traz muitos benefícios e...

The Codest
Kamil Ferens Diretor de Crescimento
Desenvolvimento de software

Ruby on Rails modularização com Packwerk Episódio I

Os seres humanos têm dificuldade em ver o panorama geral de um problema sem dedicar muito tempo e esforço. Isto acontece especialmente quando se trabalha com aplicações grandes e complexas....

Nicolas Nisoria
Desenvolvimento de software

O papel do Rack no ecossistema Ruby

Saiba mais sobre o papel do rack no ecossistema do Ruby com o nosso especialista e aumente a sua habilidade no jogo do Ruby.

Nicolas Nisoria

Subscreva a nossa base de conhecimentos e mantenha-se atualizado sobre os conhecimentos do sector das TI.

    Sobre nós

    The Codest - Empresa internacional de desenvolvimento de software com centros tecnológicos na Polónia.

    Reino Unido - Sede

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

    Polónia - Pólos tecnológicos locais

    • Parque de escritórios Fabryczna, Aleja
      Pokoju 18, 31-564 Cracóvia
    • Embaixada do Cérebro, Konstruktorska
      11, 02-673 Varsóvia, Polónia

      The Codest

    • Início
    • Sobre nós
    • Serviços
    • Case Studies
    • Saber como
    • Carreiras
    • Dicionário

      Serviços

    • Aconselhamento
    • Desenvolvimento de software
    • Desenvolvimento backend
    • Desenvolvimento de front-end
    • Staff Augmentation
    • Programadores de back-end
    • Engenheiros de nuvem
    • Engenheiros de dados
    • Outros
    • Engenheiros de GQ

      Recursos

    • Factos e mitos sobre a cooperação com um parceiro externo de desenvolvimento de software
    • Dos EUA para a Europa: Porque é que as empresas americanas decidem mudar-se para a Europa?
    • Comparação dos centros de desenvolvimento da Tech Offshore: Tech Offshore Europa (Polónia), ASEAN (Filipinas), Eurásia (Turquia)
    • Quais são os principais desafios dos CTOs e dos CIOs?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Direitos de autor © 2026 por The Codest. Todos os direitos reservados.

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