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 υπάρχει ήδη') } 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 }) }, } } })() Μάθετε περισσότερα για το Ruby on Rails με Pub/Sub - The Codest
The Codest
  • Σχετικά με εμάς
  • Υπηρεσίες
    • Ανάπτυξη λογισμικού
      • Ανάπτυξη Frontend
      • Backend Ανάπτυξη
    • Staff Augmentation
      • Frontend Developers
      • Backend Developers
      • Μηχανικοί δεδομένων
      • Μηχανικοί cloud
      • Μηχανικοί QA
      • Άλλα
    • Συμβουλευτική
      • Έλεγχος & Συμβουλευτική
  • Βιομηχανίες
    • Fintech & Τραπεζική
    • E-commerce
    • Adtech
    • Healthtech
    • Κατασκευή
    • Εφοδιαστική
    • Αυτοκίνητο
    • IOT
  • Αξία για
    • CEO
    • CTO
    • Διευθυντής παράδοσης
  • Η ομάδα μας
  • Case Studies
  • Μάθετε πώς
    • Blog
    • Συναντήσεις
    • Διαδικτυακά σεμινάρια
    • Πόροι
Καριέρα Ελάτε σε επαφή
  • Σχετικά με εμάς
  • Υπηρεσίες
    • Ανάπτυξη λογισμικού
      • Ανάπτυξη Frontend
      • Backend Ανάπτυξη
    • Staff Augmentation
      • Frontend Developers
      • Backend Developers
      • Μηχανικοί δεδομένων
      • Μηχανικοί cloud
      • Μηχανικοί QA
      • Άλλα
    • Συμβουλευτική
      • Έλεγχος & Συμβουλευτική
  • Αξία για
    • CEO
    • CTO
    • Διευθυντής παράδοσης
  • Η ομάδα μας
  • Case Studies
  • Μάθετε πώς
    • Blog
    • Συναντήσεις
    • Διαδικτυακά σεμινάρια
    • Πόροι
Καριέρα Ελάτε σε επαφή
Πίσω βέλος GO BACK
2022-12-07
Ανάπτυξη λογισμικού

Μάθετε περισσότερα για το Ruby on Rails με Pub/Sub

The Codest

Michal Pawlak

Ανώτερος προγραμματιστής Ruby

Το Pub/Sub μπορεί να αποφέρει πολλά οφέλη στο έργο - μπορεί να κάνει τον κώδικα καθαρό, να αποσυνδέσει τις υπηρεσίες και να τις κάνει εύκολα επεκτάσιμες. Μάθετε περισσότερα για το Pub/Sub στο παρακάτω άρθρο και ανεβάστε το έργο σας επίπεδο!

Ruby on Rails (Rails, RoR) είναι ένα πολύ γνωστό πλαίσιο εφαρμογών ιστού γραμμένο σε Ruby γλώσσα προγραμματισμού. Pub/Sub είναι μια σύντομη ονομασία των προτύπων σχεδίασης λογισμικού που ονομάζονται Δημοσίευση-συνδρομή. Θα εξηγήσω πώς η επικοινωνία μεταξύ των συστατικών λογισμικού στο Rails θα μπορούσε να αντιμετωπιστεί από το Pub/Sub.

Τι είναι η Pub/sub;

Pub/sub είναι ένα πρότυπο σχεδίασης λογισμικού που παρέχει επικοινωνία μεταξύ υπηρεσιών. Υπηρεσία
συνεπάγεται έναν από τους δύο ρόλους: εκδότης (που παράγει) ή δέκτης (που καταναλώνει). Τι είναι
που παράγεται προς κατανάλωση προσδιορίζεται ως γεγονός ή μήνυμα ή ειδοποίηση. Στο
πλαίσιο αυτού του άρθρου, χρησιμοποιούνται εναλλακτικά για να αναφερθούν στο ίδιο πράγμα.
Η υπηρεσία που παράγει δεν γνωρίζει ποιος καταναλώνει. Η υπηρεσία που καταναλώνει δεν
να γνωρίζετε την προέλευση του μηνύματος. Μπορούν να παραμείνουν άγνωστοι μεταξύ τους. Διαφέρει από το
ουρές μηνυμάτων, όπου το στοιχείο που στέλνει το μήνυμα συχνά γνωρίζει τον προορισμό του
- αυτό το στυλ ανταλλαγής μηνυμάτων σας επιτρέπει να στέλνετε μηνύματα οπουδήποτε. Αυτός ο μηχανισμός είναι ο πυρήνας
του Pub/sub και αυτό σημαίνει ότι είναι αποσυνδεδεμένες.

Για να εκφράσουν τα κοινά τους συμφέροντα, πρέπει να έχουν κοινή αντίληψη. Ως εκ τούτου,
και οι δύο ρόλοι έχουν έναν σιωπηρό μηχανισμό του stick όπου ο παραγωγός ενός μηνύματος και ο
ο καταναλωτής του μηνύματος συναντάται. Αυτός ο μηχανισμός ονομάζεται θέμα, συνδρομή ή θέμα. Είναι
υπεύθυνη για την κατηγοριοποίηση των μηνυμάτων σε θέματα, είναι ουσιαστικά ένα άπατρις φίλτρο μηνυμάτων.
Τα θέματα λειτουργούν ως σταθμοί εκπομπής. Ένας εκδότης παράγει το μήνυμα στο θέμα,
οι συνδρομητές λαμβάνουν αμέσως το μήνυμα από το θέμα. Λόγω της αποσυνδεδεμένης
υπηρεσίες, ο πιο αποδοτικός τρόπος ανταλλαγής μηνυμάτων είναι η ασύγχρονη διαχείρισή τους.

Rails χωρίς Pub/Sub

Από προεπιλογή, δεν υπάρχει επιβάρυνση του Rails για τα πρότυπα σχεδίασης λογισμικού για τη μετάδοση μηνυμάτων μεταξύ στοιχείων. Οι προγραμματιστές χρησιμοποιούν το πρότυπο αντικειμενοστραφής προγραμματισμός (OOP) παράδειγμα: περνώντας παραμέτρους σε συναρτήσεις, ζητώντας κλάσεις σχετικά με τις τιμές.

Όταν η εφαρμογή είναι μάλλον απλή, μπορεί να είναι αρκετή. Όταν η εφαρμογή μεγαλώνει, για παράδειγμα, κάποιες λειτουργίες πρέπει να γίνονται ασύγχρονα, τότε η έργο χρειάζεται αφαίρεση που επιλύει αυτή τη ροή δεδομένων. Αντί να επανεφεύρουν τον τροχό, οι προγραμματιστές μπορούν να υλοποιήσουν Pub/sub για να καλύψει αυτή την έλλειψη αφαίρεσης.

Πλεονεκτήματα του Pub/Sub με το Rails

  • Αποφύγετε τις ανακλήσεις ενεργών εγγραφών.
  • Με την προσθήκη ασύγχρονης παράλληλης επεξεργασίας σε ένα σύστημα, βελτιώνονται οι επιδόσεις, η αξιοπιστία και η επεκτασιμότητα.
  • Τα μηνύματα μπορούν να μεταδίδονται ασύγχρονα σε διάφορα μέρη του συστήματος.
  • Επιτρέπει την ασύγχρονη μετάδοση μηνυμάτων σε διάφορα μέρη ενός συστήματος.
  • Αποσύνδεση - η προσθήκη ή η αλλαγή μιας λειτουργικότητας δεν θα επηρεάσει τίποτα, επειδή η Pub/Sub
    σας επιτρέπει να τροποποιήσετε τον τρόπο με τον οποίο αλληλεπιδρούν τα πάντα.
  • Ο καταναλωτής μηνυμάτων δεν θα χρειάζεται πλέον να ελέγχει περιοδικά για ενημερώσεις ή νέες
    πληροφορίες. Μειώνει την καθυστέρηση παράδοσης που μπορεί να είναι ιδιαίτερα προβληματική σε συστήματα
    χωρίς καμία ανοχή για καθυστερήσεις.
  • Δεν υπάρχει όριο για το πόσους συνδρομητές μπορεί να διαχειριστεί το σύστημα, επειδή μπορεί να αλλάξει,
    να αναβαθμιστούν, να πολλαπλασιαστούν ή να εξαφανιστούν ανά πάσα στιγμή.

Μειονεκτήματα του Pub/Sub με Rails

  • Το σημαντικότερο μειονέκτημα των συστημάτων Pub/sub είναι η αποσύνδεση του εκδότη και του
    συνδρομητής.

Εισαγωγή Rails Pub/Sub

Παραδείγματα του πηγαίου κώδικα στο Rails γράφτηκε χρησιμοποιώντας τη βιβλιοθήκη
Pub/Sub στο Rails (στην ονοματολογία της Ruby, μια βιβλιοθήκη ονομάζεται gem): Θα βρείτε περισσότερες λεπτομέρειες στο readme του gem. Η υλοποίηση αποτελείται από ενότητες:

  1. Τομέας,
  2. Εκδήλωση,
  3. Χειριστής συμβάντος,
  4. Εκδότης της εκδήλωσης,
  5. Συνδρομή.

Τομέας

Περιγράφει την επιχειρησιακή λογική προκειμένου να παρέχει πλαίσιο για Pub/Sub και, ως εκ τούτου, να κάνει καθαρές κωδικός.

 ενότητα Ειδοποιήσεις
   extend PubSub::Domain
 end
 ενότητα Αναφορές
   extend PubSub::Domain
 end

Εκδήλωση

Είναι μια κατηγορία που περιγράφει τι συνέβη. Δηλώστε το όνομα της κλάσης ως αυτοπεριγραφικό με το τι συνέβη όσο το δυνατόν περισσότερο, για παράδειγμα: ακυρώθηκε, άλλαξε, δημιουργήθηκε, καταστράφηκε, στάλθηκε, ενημερώθηκε. Τα ονόματα συμβάντων μπορεί να μοιάζουν με τα εξής: ProfitAndLossStatementCreatedEvent, που σημαίνει ότι δημιουργήθηκε μια οικονομική κατάσταση.

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

Εκδότης εκδηλώσεων

Κλάση ικανή να εκπέμπει συμβάντα. Το παράδειγμα δείχνει τη δημιουργία μιας αναφοράς υπηρεσίας. Όταν η έκθεση δημιουργηθεί με επιτυχία, εκπέμπει το συμβάν της δημιουργίας της εν λόγω έκθεσης.

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

Χειριστής συμβάντος

Αυτή η κλάση θα πρέπει να εκτελείται ως απόκριση στο χειρισμό ενός συμβάντος.

ενότητα Ειδοποιήσεις
 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

Συνδρομή

Τα συμβάντα συνδέονται με τους χειριστές τους μέσω συνδρομών.

ειδοποιήσεις:
 report__profit_and_loss_statement_created: async

Παράδειγμα περιπτώσεων χρήσης:

  • Λειτουργία "Follow" στα κοινωνικά δίκτυα,
  • Διαδίκτυο των πραγμάτων,
  • Ταχυδρομείο,
  • Ειδοποίηση σχετικά με τα παραγόμενα αρχεία.

Παρόμοια μοτίβα

  1. EventBus - στοιχεία μπορούν να στέλνουν συμβάντα στο EventBus χωρίς να γνωρίζουν ποιος θα τα παραλάβει ή πόσοι συμμετέχοντες θα αντιδράσουν,
  2. Παρατηρητής - το υποκείμενο διατηρεί έναν κατάλογο εξαρτημένων ατόμων, που ονομάζονται παρατηρητές, και τους ειδοποιεί κάθε φορά που αλλάζει η κατάστασή τους,
  3. Συγκέντρωση - κατά την αναζήτηση, οι πελάτες ρωτούν περιοδικά το σύστημα αν υπάρχουν νέα συμβάντα ή δεδομένα.

Πολύτιμοι λίθοι

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

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

  • https://github.com/stevo/pubsubστοράγες

Περίληψη

Η Pub/sub δεν είναι μια συνηθισμένη προσέγγιση στο Ruby in Rails. Όπως παρουσιάζεται στο άρθρο, αυτό το μοτίβο μπορεί να φέρει πολλά οφέλη στο έργο - μπορεί να κάνει τον κώδικα καθαρό, να αποσυνδέσει τις υπηρεσίες και να τις κάνει εύκολα επεκτάσιμες.

πανό συνεργασίας

Σχετικά άρθρα

Fintech

5 παραδείγματα της καλύτερης χρήσης της Ruby

Αναρωτηθήκατε ποτέ τι μπορούμε να κάνουμε με τη Ruby; Λοιπόν, ο ουρανός είναι μάλλον το όριο, αλλά είμαστε στην ευχάριστη θέση να μιλήσουμε για μερικές περισσότερο ή λιγότερο γνωστές περιπτώσεις...

The Codest
Pawel Muszynski Software Engineer
Ανάπτυξη λογισμικού

Ανάπτυξη Rails με TMUX, Vim, Fzf + Ripgrep

Πριν από μερικά χρόνια, έκανα ψησταριά με μερικούς φίλους μου, όλοι προγραμματιστές Java. Δεν είμαι σίγουρος πώς προέκυψε, αλλά αρχίσαμε να μιλάμε για τα περιβάλλοντα προγραμματισμού μας. I...

The Codest
Marcin Doliwa Software Engineer
Ανάπτυξη λογισμικού

Ανάπτυξη προϊόντων: Python vs. Ruby

Η Python και η Ruby είναι οι δύο πιο διαδεδομένες γλώσσες προγραμματισμού backend. Η Python είναι λίγο πιο δημοφιλής και έχει ευρύτερη εφαρμογή. Ωστόσο, η Ruby προσφέρει επίσης πολλά πλεονεκτήματα και...

The Codest
Kamil Ferens Επικεφαλής ανάπτυξης
Ανάπτυξη λογισμικού

Ruby on Rails modularization με Packwerk Επεισόδιο I

Οι άνθρωποι δυσκολεύονται να δουν τη μεγάλη εικόνα ενός προβλήματος χωρίς να αφιερώσουν πολύ χρόνο και προσπάθεια. Αυτό συμβαίνει ιδιαίτερα κατά την εργασία με μεγάλες και πολύπλοκες εφαρμογές....

Nicolas Nisoria
Ανάπτυξη λογισμικού

Ο ρόλος του Rack στο οικοσύστημα Ruby

Μάθετε περισσότερα για το ρόλο του rack στο οικοσύστημα της Ruby από τον ειδικό μας και βελτιώστε τις ικανότητές σας στο παιχνίδι της Ruby.

Nicolas Nisoria

Εγγραφείτε στη βάση γνώσεών μας και μείνετε ενήμεροι για την τεχνογνωσία από τον τομέα της πληροφορικής.

    Σχετικά με εμάς

    The Codest - Διεθνής εταιρεία ανάπτυξης λογισμικού με κέντρα τεχνολογίας στην Πολωνία.

    Ηνωμένο Βασίλειο - Έδρα

    • Γραφείο 303B, 182-184 High Street North E6 2JA
      Λονδίνο, Αγγλία

    Πολωνία - Τοπικοί κόμβοι τεχνολογίας

    • Πάρκο γραφείων Fabryczna, Aleja
      Pokoju 18, 31-564 Κρακοβία
    • Πρεσβεία του εγκεφάλου, Konstruktorska
      11, 02-673 Βαρσοβία, Πολωνία

      The Codest

    • Αρχική σελίδα
    • Σχετικά με εμάς
    • Υπηρεσίες
    • Case Studies
    • Μάθετε πώς
    • Καριέρα
    • Λεξικό

      Υπηρεσίες

    • Συμβουλευτική
    • Ανάπτυξη λογισμικού
    • Backend Ανάπτυξη
    • Ανάπτυξη Frontend
    • Staff Augmentation
    • Backend Developers
    • Μηχανικοί cloud
    • Μηχανικοί δεδομένων
    • Άλλα
    • Μηχανικοί QA

      Πόροι

    • Γεγονότα και μύθοι σχετικά με τη συνεργασία με εξωτερικό συνεργάτη ανάπτυξης λογισμικού
    • Από τις ΗΠΑ στην Ευρώπη: Γιατί οι αμερικανικές νεοσύστατες επιχειρήσεις αποφασίζουν να μετεγκατασταθούν στην Ευρώπη
    • Σύγκριση υπεράκτιων κόμβων ανάπτυξης τεχνολογίας: Ευρώπη (Πολωνία), ASEAN (Φιλιππίνες), Ευρασία (Τουρκία)
    • Ποιες είναι οι κορυφαίες προκλήσεις των CTOs και των CIOs;
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Πνευματικά δικαιώματα © 2025 από The Codest. Όλα τα δικαιώματα διατηρούνται.

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