The Codest
  • O nás
  • Služby
    • Vývoj softwaru
      • Vývoj frontendů
      • Vývoj backendu
    • Staff Augmentation
      • Vývojáři frontendů
      • Vývojáři backendu
      • Datoví inženýři
      • Cloudoví inženýři
      • Inženýři QA
      • Další
    • To Advisory
      • Audit a poradenství
  • Odvětví
    • Fintech a bankovnictví
    • E-commerce
    • Adtech
    • Healthtech
    • Výroba
    • Logistika
    • Automobilový průmysl
    • IOT
  • Hodnota za
    • CEO
    • CTO
    • Manažer dodávek
  • Náš tým
  • Case Studies
  • Vědět jak
    • Blog
    • Setkání
    • Webové semináře
    • Zdroje
Kariéra Spojte se s námi
  • O nás
  • Služby
    • Vývoj softwaru
      • Vývoj frontendů
      • Vývoj backendu
    • Staff Augmentation
      • Vývojáři frontendů
      • Vývojáři backendu
      • Datoví inženýři
      • Cloudoví inženýři
      • Inženýři QA
      • Další
    • To Advisory
      • Audit a poradenství
  • Hodnota za
    • CEO
    • CTO
    • Manažer dodávek
  • Náš tým
  • Case Studies
  • Vědět jak
    • Blog
    • Setkání
    • Webové semináře
    • Zdroje
Kariéra Spojte se s námi
Šipka zpět ZPĚT
2022-12-07
Vývoj softwaru

Další informace o Ruby on Rails s funkcí Pub/Sub

The Codest

Michal Pawlak

Senior Ruby Developer

Pub/Sub může projektu přinést mnoho výhod - může zajistit čistotu kódu, oddělit služby a umožnit jejich snadné škálování. V následujícím článku se dozvíte více o Pub/Sub a zvýšíte úroveň svého projektu!

Ruby na adrese Rails (Kolejnice, RoR) je známý framework webových aplikací napsaný v jazyce Ruby programovací jazyk. Hospoda/podnik je zkrácený název návrhových vzorů softwaru, které se nazývají Publish-subscribe. Vysvětlím, jak by se komunikace mezi softwarovými komponentami v systému Rails dala řešit pomocí Pub/Sub.

Co je Pub/sub?

Pub/sub je návrhový vzor softwaru zajišťující komunikaci mezi službami. Služba
zahrnuje jednu ze dvou rolí: vydavatele (který produkuje) nebo příjemce (který spotřebovává). Co je
je určen jako událost, zpráva nebo oznámení. V
V kontextu tohoto článku se tyto pojmy používají zaměnitelně a označují totéž.
Služba, která vyrábí, neví, kdo spotřebovává. Služba, která spotřebovává, neví.
znát původ zprávy. Mohou zůstat navzájem neznámé. Tím se liší od
fronty zpráv, kde komponenta, která zprávu odesílá, často zná její cíl.
- tento styl zasílání zpráv umožňuje posílat zprávy odkudkoli. Tento mechanismus je základem
z Pub/sub a to znamená, že jsou oddělené.

Aby mohli vyjádřit své společné zájmy, musí mít společné porozumění. Proto,
Obě role mají implicitní mechanismus hole, kde producent zprávy a
spotřebitele zprávy splnit. Tento mechanismus se nazývá subjekt, odběr nebo téma. Je to
zodpovědný za kategorizaci zpráv subjektům, je to v podstatě bezstavový filtr zpráv.
Témata fungují jako vysílací stanice. Vydavatel vytváří zprávu pro téma,
odběratelé okamžitě obdrží zprávu z tématu. Vzhledem k oddělené
služeb je nejefektivnějším způsobem výměny zpráv jejich asynchronní zpracování.

Kolejnice bez Pub/Sub

Ve výchozím nastavení není v systému Rails žádná režie pro návrhové vzory softwaru pro předávání zpráv mezi komponentami. Vývojáři používají standardní objektově orientované programování (OOP) paradigma: předávání parametrů funkcím, dotazování se na třídy o hodnotách.

Pokud je žádost poměrně nekomplikovaná, může to stačit. Když se aplikace rozroste, například je třeba některé operace provádět asynchronně, pak je třeba použít tzv. projekt potřebuje abstrakci, která řeší tento tok dat. Místo toho, aby vývojáři znovu vynalézali kolo, mohou implementovat Pub/sub aby tento nedostatek abstrakce vyplnil.

Výhody Pub/Sub s Rails

  • Vyhněte se zpětným voláním aktivního záznamu.
  • Přidáním asynchronního paralelního zpracování do systému se zvýší výkon, spolehlivost a efektivita. škálovatelnost jsou vylepšeny.
  • Zprávy lze vysílat asynchronně do různých částí systému.
  • Umožňuje asynchronní vysílání zpráv do různých částí systému.
  • Oddělení - přidání nebo změna funkce nebude mít na nic vliv, protože Pub/Sub
    umožňuje upravit způsob interakce.
  • Spotřebitel zpráv již nebude muset pravidelně kontrolovat aktualizace nebo nové zprávy.
    informace. Snižuje zpoždění při doručování, které může být problematické zejména v systémech.
    bez tolerance ke zpoždění.
  • Počet účastníků, které systém zvládne, není omezen, protože se může měnit,
    kdykoli upgradovat, množit nebo zanikat.

Nevýhody Pub/Sub s Rails

  • Hlavní nevýhodou systémů Pub/sub je jejich oddělení vydavatele od vydavatele.
    předplatitel.

Rails Pub/Sub představit

Příklady zdrojových kódů v Rails byly napsány pomocí knihovny
Pub/Sub on Rails (v nomenklatuře Ruby se knihovna nazývá gem): Další podrobnosti najdete v readme gemu. Implementace se skládá z modulů:

  1. Doména,
  2. Událost,
  3. Obsluha události,
  4. Vydavatel akce,
  5. Předplatné.

Doména

Popisuje obchodní logiku, aby poskytla kontext pro Pub/Sub, a tím umožnila čistou práci s daty. kód.

 modul Oznámení
   extend PubSub::Domain
 end
 modul Zprávy
   rozšířit PubSub::Domain
 end

Událost

Jedná se o třídu, která popisuje, co se stalo. Název třídy deklarujte jako sebepopisný s tím, co se stalo, například: zrušeno, změněno, vytvořeno, zničeno, odesláno, aktualizováno. Názvy událostí mohou vypadat např: ProfitAndLossStatementCreatedEvent, což znamená, že byl vytvořen finanční výkaz.

 třída Reports::ProfitAndLossStatementCreatedEvent < PubSub::DomainEvent
   atribut :profit_and_loss_statement_id, Types::Strict::Integer
 end

Vydavatel události

Třída schopná vysílat události. Příklad ukazuje vytvoření servisní zprávy. Po úspěšném vytvoření sestavy emituje událost vytvoření této sestavy.

třída Reports::ProfitAndLossStatementService
   include PubSub::Emit
    def execute
     emit(:report_profit_and_loss_statement_created, profit_and_loss_statement_id: id) if result.ok?
   end
 end

Obsluha události

Tato třída by měla být spuštěna v reakci na zpracování události.

modul Oznámení
 třída ReportsProfitAndLossStatementCreatedHandler < PubSub::DomainEventHandler
   def call
     ReportMailer.profit_and_loss_statement(profit_and_loss_statement).deliver_now
   end

   private

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

Předplatné

Události jsou spojeny se svými zpracovateli prostřednictvím odběrů.

oznámení:
 reports__profit_and_loss_statement_created: async

Příklady použití:

  • Funkce "Sledovat" v sociálních sítích,
  • Internet věcí,
  • Poštovní zásilky,
  • Upozornění na vygenerované soubory.

Podobné vzory

  1. EventBus - komponenty mohou posílat události do sběrnice EventBus, aniž by věděly, kdo je vyzvedne nebo kolik respondentů je vyzvedne. reagovat,
  2. Pozorovatel - subjekt udržuje seznam závislých osob, tzv. pozorovatelů, a oznamuje jim, kdykoli se změní jejich stav,
  3. Sdružování - při dotazování se klienti pravidelně ptají systému, zda jsou k dispozici nové události nebo data.

Drahokamy

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

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

  • https://github.com/stevo/pubsubna adresekolejnice

Souhrn

Pub/sub není v Ruby in Rails běžný přístup. Jak bylo představeno v článku, tento vzor může projektu přinést mnoho výhod - díky němu je kód čistý, služby jsou oddělené a snadno škálovatelné.

banner spolupráce

Související články

Fintech

5 příkladů nejlepšího použití jazyka Ruby

Přemýšleli jste někdy o tom, co všechno můžeme dělat s Ruby? No, obloze se asi meze nekladou, ale rádi si povíme o některých více či méně známých případech...

The Codest
Pawel Muszynski Software Engineer
Vývoj softwaru

Vývoj Rails pomocí TMUX, Vim, Fzf + Ripgrep

Před několika lety jsem griloval se svými přáteli, samými vývojáři v Javě. Nejsem si jistý, jak k tomu došlo, ale začali jsme se bavit o našich kódovacích prostředích. I...

The Codest
Marcin Doliwa Software Engineer
Vývoj softwaru

Vývoj produktu: Python vs. Ruby

Python a Ruby jsou nejpoužívanější programovací jazyky pro backend. Python je o něco populárnější a má širší uplatnění. Ruby však přináší také mnoho výhod a...

The Codest
Kamil Ferens Vedoucí oddělení růstu
Vývoj softwaru

Modularizace Ruby on Rails pomocí Packwerk Episode I

Pro lidi je obtížné vidět celkový obraz problému, aniž by mu věnovali mnoho času a úsilí. To se stává zejména při práci s rozsáhlými a složitými aplikacemi.....

Nicolas Nisoria
Vývoj softwaru

Role Racku v ekosystému Ruby

Zjistěte více o úloze racku v ekosystému Ruby od našeho odborníka a zvyšte své dovednosti ve hře s Ruby.

Nicolas Nisoria

Přihlaste se k odběru naší znalostní databáze a získejte aktuální informace o odborných znalostech z oblasti IT.

    O nás

    The Codest - Mezinárodní společnost zabývající se vývojem softwaru s technologickými centry v Polsku.

    Spojené království - ústředí

    • Kancelář 303B, 182-184 High Street North E6 2JA
      Londýn, Anglie

    Polsko - Místní technologická centra

    • Kancelářský park Fabryczna, Aleja
      Pokoju 18, 31-564 Krakov
    • Brain Embassy, Konstruktorska
      11, 02-673 Varšava, Polsko

      The Codest

    • Home
    • O nás
    • Služby
    • Case Studies
    • Vědět jak
    • Kariéra
    • Slovník

      Služby

    • To Advisory
    • Vývoj softwaru
    • Vývoj backendu
    • Vývoj frontendů
    • Staff Augmentation
    • Vývojáři backendu
    • Cloudoví inženýři
    • Datoví inženýři
    • Další
    • Inženýři QA

      Zdroje

    • Fakta a mýty o spolupráci s externím partnerem pro vývoj softwaru
    • Z USA do Evropy: Proč se americké startupy rozhodly přesídlit do Evropy?
    • Srovnání technických vývojových center v zahraničí: Tech Offshore Evropa (Polsko), ASEAN (Filipíny), Eurasie (Turecko)
    • Jaké jsou hlavní výzvy CTO a CIO?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Copyright © 2026 by The Codest. Všechna práva vyhrazena.

    cs_CZCzech
    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 pt_PTPortuguese cs_CZCzech