window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = window if (w.LeadBooster) { console.warn('LeadBooster już istnieje') } 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 }) }, } } })() Dowiedz się więcej o Ruby on Rails z Pub/Sub - The Codest
The Codest
  • O nas
  • Nasze Usługi
    • Software Development
      • Frontend Development
      • Backend Development
    • Zespoły IT
      • Programiści frontendowi
      • Backend Dev
      • Inżynierowie danych
      • Inżynierowie rozwiązań chmurowych
      • Inżynierowie QA
      • Inne
    • Konsultacje IT
      • Audyt i doradztwo
  • Branże
    • Fintech i bankowość
    • E-commerce
    • Adtech
    • Healthtech
    • Produkcja
    • Logistyka
    • Motoryzacja
    • IOT
  • Wartość dla
    • CEO
    • CTO
    • Delivery Managera
  • Nasz zespół
  • Case Studies
  • Nasze Know How
    • Blog
    • Meetups
    • Webinary
    • Raporty
Kariera Skontaktuj się z nami
  • O nas
  • Nasze Usługi
    • Software Development
      • Frontend Development
      • Backend Development
    • Zespoły IT
      • Programiści frontendowi
      • Backend Dev
      • Inżynierowie danych
      • Inżynierowie rozwiązań chmurowych
      • Inżynierowie QA
      • Inne
    • Konsultacje IT
      • Audyt i doradztwo
  • Wartość dla
    • CEO
    • CTO
    • Delivery Managera
  • Nasz zespół
  • Case Studies
  • Nasze Know How
    • Blog
    • Meetups
    • Webinary
    • Raporty
Kariera Skontaktuj się z nami
Strzałka w tył WSTECZ
2022-12-07
Software Development

Więcej informacji o Ruby on Rails z Pub/Sub

The Codest

Michał Pawlak

Starszy programista Ruby

Pub/Sub może przynieść wiele korzyści dla projektu - może sprawić, że kod będzie czysty, oddzielić usługi i uczynić je łatwo skalowalnymi. Dowiedz się więcej o Pub/Sub w poniższym artykule i podnieś poziom swojego projektu!

Ruby on Rails (Rails, RoR) jest dobrze znanym frameworkiem aplikacji internetowych napisanym w języku Ruby język programowania. Pub/Sub to krótka nazwa wzorców projektowych oprogramowania zwanych Publikuj-subskrybuj. Wyjaśnię, w jaki sposób komunikacja między komponentami oprogramowania w Railsach może być obsługiwana przez Pub/Sub.

Co to jest Pub/Sub?

Pub/sub to wzorzec projektowy oprogramowania zapewniający komunikację między usługami. Usługa
wiąże się z jedną z dwóch ról: wydawcy (który produkuje) lub odbiorcy (który konsumuje). Co to jest
jest określana jako zdarzenie, komunikat lub powiadomienie. W
W kontekście tego artykułu są one używane zamiennie w odniesieniu do tej samej rzeczy.
Usługa, która produkuje, nie wie, kto konsumuje. Usługa, która konsumuje, nie
znają pochodzenie wiadomości. Mogą pozostać dla siebie nieznani. Różni się to od
kolejki wiadomości, w których komponent wysyłający wiadomość często zna jej miejsce docelowe
- Ten styl przesyłania wiadomości pozwala na wysyłanie ich w dowolne miejsce. Mechanizm ten jest podstawą
z Pub/sub i oznacza to, że są one od siebie oddzielone.

Aby wyrazić swoje wzajemne interesy, muszą mieć wspólne zrozumienie. Dlatego,
Obie role mają ukryty mechanizm "kija", w którym producent wiadomości i użytkownik
konsument wiadomości spotyka się. Mechanizm ten nazywany jest tematem, subskrypcją lub tematem. Jest to
odpowiedzialny za kategoryzowanie wiadomości do tematów, jest zasadniczo bezstanowym filtrem wiadomości.
Tematy działają jak stacje nadawcze. Wydawca wysyła wiadomość do tematu,
subskrybenci natychmiast otrzymują wiadomość z tematu. Ze względu na rozłączność
usług, najbardziej efektywnym sposobem wymiany wiadomości jest ich asynchroniczna obsługa.

Railsy bez Pub/Sub

Domyślnie Railsy nie mają narzutu na wzorce projektowe oprogramowania do przekazywania komunikatów między komponentami. Programiści używają standardowych programowanie obiektowe (OOP): przekazywanie parametrów do funkcji, odpytywanie klas o wartości.

Gdy aplikacja jest raczej nieskomplikowana, może to wystarczyć. Gdy aplikacja się rozrasta, na przykład niektóre operacje muszą być wykonywane asynchronicznie, wówczas należy użyć funkcji projekt wymaga abstrakcji, która rozwiązuje ten przepływ danych. Zamiast wymyślać koło na nowo, deweloperzy mogą zaimplementować Pub/sub aby wypełnić ten brak abstrakcji.

Zalety Pub/Sub z Rails

  • Unikaj wywołań zwrotnych Active Record.
  • Dodanie asynchronicznego przetwarzania równoległego do systemu poprawia wydajność, niezawodność i skalowalność.
  • Wiadomości mogą być nadawane asynchronicznie do różnych części systemu.
  • Umożliwia asynchroniczną emisję wiadomości do różnych części systemu.
  • Oddzielenie - dodanie lub zmiana funkcjonalności nie wpłynie na nic, ponieważ Pub/Sub
    pozwala modyfikować sposób interakcji wszystkich elementów.
  • Odbiorca wiadomości nie będzie już musiał okresowo sprawdzać dostępności aktualizacji lub nowych wiadomości.
    informacje. Zmniejsza to opóźnienia w dostarczaniu, które mogą być szczególnie problematyczne w systemach
    bez tolerancji dla opóźnień.
  • Nie ma limitu liczby subskrybentów, których system może obsłużyć, ponieważ może się on zmieniać,
    aktualizować, mnożyć lub znikać w dowolnym momencie.

Wady Pub/Sub z Railsami

  • Główną wadą systemów Pub/Sub jest ich rozłączność pomiędzy wydawcą i subskrybentem.
    abonent.

Wprowadzenie Rails Pub/Sub

Przykłady źródeł w Railsach zostały napisane przy użyciu biblioteki
Pub/Sub on Rails (w nomenklaturze Rubiego biblioteka nazywana jest gemem): Więcej szczegółów znajdziesz w readme gema. Implementacja składa się z modułów:

  1. Domena,
  2. Wydarzenie,
  3. Obsługa zdarzeń,
  4. Wydawca wydarzenia,
  5. Subskrypcja.

Domena

Opisuje logikę biznesową w celu zapewnienia kontekstu dla Pub/Sub, a tym samym uczynienia go czystym. kod.

 moduł Powiadomienia
   extend PubSub::Domain
 koniec
 moduł Raporty
   extend PubSub::Domain
 koniec

Wydarzenie

Jest to klasa, która opisuje, co się stało. Zadeklaruj nazwę klasy jako samoopisującą się z tym, co się stało, na przykład: anulowane, zmienione, utworzone, zniszczone, wysłane, zaktualizowane. Nazwy zdarzeń mogą wyglądać następująco: ProfitAndLossStatementCreatedEvent, co oznacza, że zostało utworzone sprawozdanie finansowe.

 class Reports::ProfitAndLossStatementCreatedEvent < PubSub::DomainEvent
   atrybut :profit_and_loss_statement_id, Types::Strict::Integer
 end

Wydawca wydarzenia

Klasa zdolna do emitowania zdarzeń. Przykład pokazuje tworzenie raportu usługi. Po pomyślnym utworzeniu raportu emitowane jest zdarzenie utworzenia tego raportu.

class 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

Obsługa zdarzeń

Klasa ta powinna być wykonywana w odpowiedzi na obsługę zdarzenia.

moduł Powiadomienia
 class 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

Subskrypcja

Zdarzenia są powiązane ze swoimi programami obsługi poprzez subskrypcje.

powiadomienia:
 reports__profit_and_loss_statement_created: async

Przykładowe przypadki użycia:

  • Funkcja "Śledź" w sieciach społecznościowych,
  • Internet rzeczy,
  • Mailing,
  • Powiadomienie o wygenerowanych plikach.

Podobne wzorce

  1. EventBus - Komponenty mogą wysyłać zdarzenia do EventBus, nie wiedząc, kto je odbierze ani ilu respondentów zareaguje,
  2. Obserwator - podmiot utrzymuje listę podmiotów zależnych, zwanych obserwatorami, i powiadamia ich za każdym razem, gdy zmienia się ich stan,
  3. Łączenie - Podczas odpytywania klienci okresowo pytają system, czy są jakieś nowe zdarzenia lub dane.

Klejnoty

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

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

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

Podsumowanie

Pub/sub nie jest powszechnym podejściem w Ruby in Rails. Jak przedstawiono w artykule, wzorzec ten może przynieść wiele korzyści dla projektu - może uczynić kod czystym, oddzielić usługi i uczynić je łatwo skalowalnymi.

baner współpracy

Powiązane artykuły

Fintech

5 przykładów najlepszego wykorzystania Rubiego

Czy kiedykolwiek zastanawiałeś się, co możemy zrobić z Ruby? Cóż, niebo jest prawdopodobnie granicą, ale chętnie porozmawiamy o kilku mniej lub bardziej znanych przypadkach...

The Codest
Paweł Muszyński Software Engineer
Software Development

Rails Development z TMUX, Vim, Fzf + Ripgrep

Kilka lat temu grillowałem z kilkoma moimi przyjaciółmi, wszyscy byli programistami Java. Nie jestem pewien, jak do tego doszło, ale zaczęliśmy rozmawiać o naszych środowiskach programistycznych. I...

The Codest
Marcin Doliwa Software Engineer
Software Development

Rozwój produktu: Python vs. Ruby

Python i Ruby są najczęściej używanymi językami programowania zaplecza. Python jest nieco bardziej popularny i ma szersze zastosowanie. Jednak Ruby również przynosi wiele korzyści i...

The Codest
Kamil Ferens Dyrektor ds. rozwoju
Software Development

Modularyzacja Ruby on Rails za pomocą Packwerk Episode I

Ludziom trudno jest zobaczyć szerszy obraz problemu bez poświęcania dużej ilości czasu i wysiłku. Dzieje się tak zwłaszcza podczas pracy z dużymi i złożonymi aplikacjami....

Nicolas Nisoria
Software Development

Rola Rack w ekosystemie Ruby

Dowiedz się więcej o roli Rack w ekosystemie Ruby od naszego eksperta i podnieś swoje umiejętności w Ruby.

Nicolas Nisoria

Subskrybuj naszą bazę wiedzy i bądź na bieżąco!

    O nas

    The Codest - Międzynarodowa firma programistyczna z centrami technologicznymi w Polsce.

    Wielka Brytania - siedziba główna

    • Office 303B, 182-184 High Street North E6 2JA
      Londyn, Anglia

    Polska - lokalne centra technologiczne

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

      The Codest

    • Strona główna
    • O nas
    • Nasze Usługi
    • Case Studies
    • Nasze Know How
    • Kariera
    • Słownik

      Nasze Usługi

    • Konsultacje IT
    • Software Development
    • Backend Development
    • Frontend Development
    • Zespoły IT
    • Backend Dev
    • Inżynierowie rozwiązań chmurowych
    • Inżynierowie danych
    • Inne
    • Inżynierowie QA

      Raporty

    • Fakty i mity na temat współpracy z zewnętrznym partnerem programistycznym
    • Z USA do Europy: Dlaczego amerykańskie startupy decydują się na relokację do Europy?
    • Porównanie centrów rozwoju Tech Offshore: Tech Offshore Europa (Polska), ASEAN (Filipiny), Eurazja (Turcja)
    • Jakie są największe wyzwania CTO i CIO?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Warunki korzystania z witryny

    Copyright © 2025 by The Codest. Wszelkie prawa zastrzeżone.

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