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

Άποψη: 3797|Απάντηση: 0

Λεπτομερής επεξήγηση του πρωτοκόλλου AMQP

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 14/8/2022 11:22:55 μ.μ. | | | |
Εισαγωγή στο πρωτόκολλο AMQP

Το AMQP (Advanced Message Queuing Protocol) είναι ένα τυπικό πρωτόκολλο επιπέδου εφαρμογής που παρέχει ενοποιημένες υπηρεσίες ανταλλαγής μηνυμάτων και είναι ένα ανοιχτό πρότυπο για πρωτόκολλα επιπέδου εφαρμογής που έχουν σχεδιαστεί για ενδιάμεσο λογισμικό προσανατολισμένο στα μηνύματα. Το AMQP είναι ένα πρωτόκολλο δικτύου για τη μετάδοση ασύγχρονων μηνυμάτων μεταξύ διεργασιών.

Οι πελάτες και το ενδιάμεσο λογισμικό μηνυμάτων που βασίζονται σε αυτό το πρωτόκολλο μπορούν να παραδίδουν μηνύματα χωρίς να περιορίζονται από διαφορετικά προϊόντα πελάτη/ενδιάμεσου λογισμικού, διαφορετικές γλώσσες ανάπτυξης κ.λπ.

Τα κύρια χαρακτηριστικά του AMQP είναι ο προσανατολισμός στο μήνυμα, η ουρά, η δρομολόγηση (συμπεριλαμβανομένης της peer-to-peer και της δημοσίευσης/εγγραφής), η αξιοπιστία και η ασφάλεια. Το AMQP επιβάλλει τη συμπεριφορά των παρόχων μηνυμάτων και των πελατών, επιτρέποντας την πραγματική διαλειτουργικότητα μεταξύ διαφορετικών προμηθευτών.

AMQP και JMS

Το JMS ήταν μια προσπάθεια τυποποίησης του ενδιάμεσου λογισμικού πρώιμων μηνυμάτων, τυποποιήθηκε μόνο σε επίπεδο API και απείχε πολύ από τη δημιουργία διαλειτουργικότητας.

Σε αντίθεση με το JMS, το AMQP είναι ένα πρωτόκολλο σε επίπεδο καλωδίου που περιγράφει τη μορφή των δεδομένων που μεταδίδονται μέσω ενός δικτύου, που ρέουν σε byte. Ως αποτέλεσμα, κάθε εργαλείο που συμμορφώνεται με αυτήν τη μορφή δεδομένων, η οποία δημιουργεί και ερμηνεύει μηνύματα, είναι διαλειτουργικό με άλλα συμβατά εργαλεία.

Σύνθεση πυρήνα AMQP



Παραγωγός

Νέα παραγωγής.

ConnectionFactory

Το εργοστάσιο που κατασκευάζει το Connection.

Σύνδεση

Σύνδεση, σύνδεση δικτύου εφαρμογών με Broker TCP/IP/Triple Handshake και Quad Wave.

Οι συνδέσεις AMQP είναι συνήθως μεγάλες συνδέσεις. Το AMQP είναι ένα πρωτόκολλο επιπέδου εφαρμογής που χρησιμοποιεί TCP για να παρέχει αξιόπιστη παράδοση. Το AMQP χρησιμοποιεί μηχανισμούς ελέγχου ταυτότητας και παρέχει προστασία TLS (SSL). Όταν μια εφαρμογή δεν χρειάζεται πλέον να συνδεθεί με τον διακομιστή μεσολάβησης AMQP, πρέπει να απελευθερώσει ομαλά τη σύνδεση AMQP αντί να τερματίσει απλώς τη σύνδεση TCP.

Κανάλι

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

Εάν η σύνδεση συγκριθεί με ένα καλώδιο οπτικών ινών, τότε το κανάλι καναλιού συγκρίνεται με μία από τις ίνες σε ένα καλώδιο οπτικών ινών. Οποιοσδήποτε αριθμός καναλιών μπορεί να δημιουργηθεί σε μια σύνδεση.

Οι περισσότερες από τις επιχειρηματικές μας δραστηριότητες γίνονται στη διεπαφή του καναλιού, συμπεριλαμβανομένων:


  • queueDeclare
  • Το exchangeDeclare για το διακόπτη
  • queueBind queueBind
  • Δημοσίευση του μηνύματος βασικόΔημοσίευση
  • Καταναλωτικά νέαβασικάΚαταναλώνω, κ.λπ.



Μεσίτης

Αποδεχτείτε τη σύνδεση του πελάτη για την υλοποίηση υπηρεσιών οντότητας AMQP, όπως το rabbitmq.

VirtualHost (Φιλοξενία Ιστοσελίδων)

Εικονική φιλοξενία, που χρησιμοποιείται για λογική απομόνωση, ένας εικονικός κεντρικός υπολογιστής μπορεί να έχει πολλές ανταλλαγές και ουρές και ο ίδιος εικονικός κεντρικός υπολογιστής δεν μπορεί να έχει ανταλλαγές με το ίδιο όνομα.

Για την υλοποίηση πολλαπλών απομονωμένων περιβαλλόντων (χρήστες, ομάδες χρηστών, μεταγωγείς, ουρές κ.λπ.) σε έναν μόνο διακομιστή μεσολάβησης, το AMQP παρέχει την έννοια των εικονικών κεντρικών υπολογιστών (virtual hosts - vhosts). Αυτό μοιάζει πολύ με την έννοια της φιλοξενίας ιστοσελίδων διακομιστών Ιστού, η οποία παρέχει ένα εντελώς απομονωμένο περιβάλλον για οντότητες AMQP. Όταν δημιουργηθεί η σύνδεση, ο πελάτης AMQP καθορίζει ποιον εικονικό κεντρικό υπολογιστή θα χρησιμοποιηθεί.

Ανταλλαγή

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

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

Τύπος διακόπτη:


  • Άμεση ανταλλαγή
  • Ανταλλαγή Fanout
  • Ανταλλαγή θεμάτων
  • Ανταλλαγή κεφαλίδων



Ιδιότητες διακόπτη:

  • Όνομα: Το όνομα του διακόπτη
  • Ανθεκτικότητα: Μια σημαία επιμονής που υποδεικνύει εάν αυτός ο διακόπτης παραμένει ή όχι
  • Αυτόματη διαγραφή: Διαγραφή σημαίας, που υποδεικνύειΌταν όλες οι ουρές γίνονται χρησιμοποιώντας αυτήν την ανταλλαγή, είτε διαγράφονται
  • Επιχειρήματα: Εξαρτάται από τον ίδιο τον πράκτορα


Κατάσταση διακόπτη:

  • Ανθεκτικός
  • Παροδικός


Οι μόνιμοι διακόπτες θα υπάρχουν μετά την επανεκκίνηση του μεσίτη, ενώ οι διακόπτες σταδιοποίησης όχι (θα πρέπει να δηλωθούν εκ νέου αφού ο μεσίτης συνδεθεί ξανά).


Προεπιλεγμένος διακόπτης

Η προεπιλεγμένη ανταλλαγή είναι στην πραγματικότητα μια άμεση ανταλλαγή που έχει προδηλωθεί από τον μεσίτη μηνυμάτων και δεν έχει όνομα (το όνομα είναι μια κενή συμβολοσειρά).

Μπορείτε να σκεφτείτε τον προεπιλεγμένο διακόπτη ως έναν ειδικό διακόπτη απευθείας σύνδεσης.
Προεπιλεγμένο όνομα διακόπτη: Null string (προεπιλογή AMQP)
Προεπιλεγμένος τύπος διακόπτη: Διακόπτης απευθείας σύνδεσης

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

Απευθείας σύνδεση με το διακόπτη

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

Κατά τη δημιουργία μιας ουράς, εάν είναι συνδεδεμένη με έναν άμεσο διακόπτη, δεν χρειάζεται να καθορίσει το όνομα του κλειδιού δρομολόγησης, επειδή θα έχει ένα προεπιλεγμένο όνομα κλειδιού δρομολόγησης, το οποίο είναι το ίδιο με το όνομα της ουράς.

Μια ουρά μεταγωγέων απευθείας σύνδεσης συνήθως κατανέμει εργασίες σε πολλούς καταναλωτές σε έναν βρόχο (αυτό το ονομάζουμε polling).

Ροή εργασίας:


  • Όταν συνδέετε μια ουρά σε έναν διακόπτη, δώστε της ένα κλειδί σύνδεσης, υποθέτοντας R.
  • Όταν ένα μήνυμα με κλειδί δρομολόγησης αποστέλλεται σε έναν απευθείας συνδεδεμένο διακόπτη, ο διακόπτης το δρομολογεί σε μια ουρά με κλειδί δρομολόγησης.





Διακόπτες ανεμιστήρα

Ο διακόπτης ανεμιστήρα δρομολογεί μηνύματα σε όλες τις ουρές που είναι συνδεδεμένες σε αυτόν, ανεξάρτητα από το δεσμευμένο κλειδί δρομολόγησης.

Εάν οι ουρές N είναι συνδεδεμένες σε έναν διακόπτη τομέα, όταν αποστέλλεται ένα μήνυμα σε αυτόν τον διακόπτη τομέα, ο διακόπτης στέλνει ένα αντίγραφο του μηνύματος σε όλες τις ουρές N ξεχωριστά. Οι διακόπτες ανεμιστήρα χρησιμοποιούνται γενικά για τη διαχείριση της δρομολόγησης εκπομπής μηνυμάτων.




Σενάρια εφαρμογής:

ραδιοτηλεοπτικά μηνύματα·
Λειτουργία ομαδικής συνομιλίας.

Διακόπτης θέματος

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

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

Ορίζει:

  • Μπορεί να υπάρχουν δύο ειδικοί χαρακτήρες * και # στο πλήκτρο σύνδεσης για ασαφή αντιστοίχιση. όπου το * χρησιμοποιείται για την αντιστοίχιση μιας λέξης, #用于匹配多个单词 (μπορεί να είναι μηδέν)
  • Ένα κλειδί δρομολόγησης είναι μια συμβολοσειρά διαχωρισμένη με κουκκίδες (ονομάζουμε λέξη κάθε μεμονωμένη συμβολοσειρά που χωρίζεται με μια τελεία)





  • Όταν η πύλη παροχής στείλει το μήνυμα Κλειδί δρομολόγησης = A.A.A, ικανοποιείται μόνο το A.*.* και θα δρομολογηθεί μόνο στην ουρά1.
  • Όταν ο παραγωγός στείλει το μήνυμα Πλήκτρο δρομολόγησης = A.B.A, ικανοποιώντας τα A.*.* και *.B.* θα δρομολογηθεί στην ουρά1 και στην ουρά2.
  • Όταν ο παραγωγός στείλει το μήνυμα Πλήκτρο δρομολόγησης=A.B.C, τότε ικανοποιούνται τα A.*.* και *.B.* και *.*. Το C δρομολογείται σε queue1, queue2, queue3.


Σενάρια εφαρμογής:

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



Διακόπτης κεφαλής

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

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

Ροή εργασίας:


  • Όταν μια ουρά είναι συνδεδεμένη με έναν διακόπτη κεφαλίδας, πολλές κεφαλίδες δεσμεύονται ταυτόχρονα για αντιστοίχιση.
  • Τα εισερχόμενα μηνύματα φέρουν μια κεφαλίδα και μια παράμετρο "x-match". Όταν το "x-match" έχει οριστεί σε "οποιαδήποτε", οποιαδήποτε τιμή της κεφαλίδας μπορεί να αντιστοιχιστεί και όταν το "x-match" έχει οριστεί σε "όλα", όλες οι τιμές της κεφαλίδας πρέπει να αντιστοιχιστούν.



Σύνοψη διακόπτη



Δεσμευτικός

Εικονική σύνδεση μεταξύ Exchange και Queue.

Το BindingKey είναι μια περιγραφή κανόνα για τις συνδέσεις Exchange και Queue. Το κλειδί σύνδεσης καθορίζει το είδος του κλειδιού δρομολόγησης που θα αντιστοιχιστεί στην τρέχουσα δεσμευμένη ουρά στην τρέχουσα ανταλλαγή.

Πλήκτρο δρομολόγησης

Κανόνες δρομολόγησης, τους οποίους μπορεί να χρησιμοποιήσει η εικονική μηχανή για να καθορίσει τον τρόπο δρομολόγησης ενός συγκεκριμένου μηνύματος.

Κλειδί δέσμευσης έναντι κλειδιού δρομολόγησης


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



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

Κλειδί δέσμευσης έναντι κλειδιού δρομολόγησης σε διάφορους διακόπτες


Προεπιλεγμένος διακόπτης: Το κλειδί σύνδεσης είναι το όνομα της ουράς, το οποίο δεν μπορεί να προσαρμοστεί. Το κλειδί δρομολόγησης είναι επίσης το όνομα της ουράς για να μπορέσει να δρομολογηθεί με επιτυχία στην ουρά
Διακόπτης απευθείας σύνδεσης: Το κλειδί δέσμευσης είναι το όνομα της ουράς, το οποίο μπορεί να προσαρμοστεί. Τα κλειδιά δρομολόγησης μπορούν να δρομολογηθούν με επιτυχία στην ουρά μόνο όταν το κλειδί σύνδεσης είναι το ίδιο
Διακόπτης ανεμιστήρα: Χωρίς κλειδί δέσμευσης. Φυσικά, δεν υπάρχει κλειδί δρομολόγησης. Δρομολογείται αυτόματα σε όλες τις ουρές που συνδέονται με το διακόπτη
Διακόπτης θέματος: προσαρμοσμένο κλειδί βιβλιοδεσίας. Προσαρμόστε το κλειδί δρομολόγησης. Routing Key==Binding Key, και η ασαφής αντιστοίχιση πρέπει να δρομολογηθεί με επιτυχία στην ουρά
Διακόπτης κεφαλής: χωρίς κλειδί βιβλιοδεσίας. Φυσικά, δεν υπάρχει κλειδί δρομολόγησης. Αντιστοιχίσεις με βάση το χαρακτηριστικό headers στο περιεχόμενο του μηνύματος που αποστέλλεται


Ουρά

Αποθηκεύει μηνύματα που πρόκειται να καταναλωθούν από την εφαρμογή.

Ιδιότητες ουράς:

  • Όνομα: Το όνομα της ουράς
  • Ανθεκτικό: Η ουρά εξακολουθεί να υπάρχει μετά την επανεκκίνηση του μεσίτη μηνυμάτων
  • Αποκλειστική: Χρησιμοποιείται μόνο από μία σύνδεση και η ουρά διαγράφεται όταν κλείσει η σύνδεση
  • Αυτόματη διαγραφή: Διαγράφεται όταν ο τελευταίος καταναλωτής καταργήσει την εγγραφή του
  • Επιχειρήματα: Ορισμένοι μεσίτες μηνυμάτων το χρησιμοποιούν για να κάνουν κάποιες επιπλέον λειτουργίες παρόμοιες με το TTL


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

Διατήρηση ουράς:
Η ουρά επιμονής αποθηκεύεται στο δίσκο και παραμένει εκεί κατά την επανεκκίνηση του μεσίτη. Οι ουρές που δεν διατηρούνται ονομάζονται μεταβατικές ουρές. Δεν απαιτούν όλα τα σενάρια και οι περιπτώσεις διατήρηση της ουράς.

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

Καταναλωτής

Ειδήσεις για την κατανάλωση των καταναλωτών. Στο AMQP, υπάρχουν δύο τρόποι για να λαμβάνουν οι καταναλωτές μηνύματα σε εκκρεμότητα:

Το ενδιάμεσο λογισμικό μηνυμάτων παραδίδει μηνύματα στους καταναλωτές (push API)
Οι καταναλωτές λαμβάνουν ενεργά μηνύματα (pull API)
Σημείωση: Όταν πολλοί καταναλωτές ακούν την ίδια ουρά, τα μηνύματα στην ουρά θα καταναλωθούν μόνο από έναν από τους καταναλωτές (όχι μία φορά για κάθε καταναλωτή)

Μήνυμα

Τα δεδομένα που μεταδίδονται μεταξύ μηνυμάτων, υπηρεσιών και εφαρμογών αποτελούνται από Ιδιότητες και σώματα.

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

Ιδιότητες μηνύματος:

  • Τύπος περιεχομένου
  • Κωδικοποίηση περιεχομένου
  • Πλήκτρο δρομολόγησης
  • Τρόπος παράδοσης (μόνιμος ή όχι)
  • Τρόπος παράδοσης (μόνιμος ή μη μόνιμος)
  • Προτεραιότητα μηνύματος
  • Χρονική σήμανση δημοσίευσης μηνύματος
  • Περίοδος λήξης
  • Αναγνωριστικό εφαρμογής εκδότη


Σώμα μηνύματος:
Εκτός από τα χαρακτηριστικά, τα μηνύματα AMQP περιέχουν επίσης ένα ωφέλιμο φορτίο (τα δεδομένα που μεταφέρει πραγματικά το μήνυμα), το οποίο αντιμετωπίζεται από τον διακομιστή μεσολάβησης AMQP ως μια αδιαφανής σειρά byte.

Ο μεσίτης μηνυμάτων δεν επιθεωρεί ούτε τροποποιεί το ωφέλιμο φορτίο. Τα μηνύματα μπορούν να περιέχουν μόνο χαρακτηριστικά χωρίς να μεταφέρουν φορτίο. Συνήθως χρησιμοποιεί δεδομένα σε σειριακή μορφή όπως το JSON και για εξοικονόμηση χρημάτων, τα buffer πρωτοκόλλου και τα MessagePacks θα σειριοποιήσουν τα δομημένα δεδομένα για δημοσίευση ως ωφέλιμο φορτίο μηνυμάτων. Το AMQP και οι ομότιμοί του χρησιμοποιούν συνήθως τα πεδία "τύπος περιεχομένου" και "κωδικοποίηση περιεχομένου" για να επικοινωνούν με μηνύματα για την αναγνώριση ωφέλιμων φορτίων, αλλά αυτό βασίζεται μόνο σε συμβάσεις.

Επιμονή μηνύματος:
Τα μηνύματα δημοσιεύονται με μόνιμο τρόπο και ο πράκτορας AMQP αποθηκεύει αυτό το μήνυμα στο δίσκο. Εάν γίνει επανεκκίνηση του διακομιστή, το σύστημα επιβεβαιώνει ότι το μήνυμα επιμονής που ελήφθη δεν έχει χαθεί.

Η απλή αποστολή ενός μηνύματος σε έναν μόνιμο διακόπτη ή η δρομολόγηση του σε μια μόνιμη ουρά δεν καθιστά το μήνυμα μόνιμο: η διατήρηση του μηνύματος εξαρτάται εξ ολοκλήρου από τη λειτουργία διατήρησης του ίδιου του μηνύματος.

Η δημοσίευση μηνυμάτων με μόνιμο τρόπο μπορεί να έχει αντίκτυπο στην απόδοση.

Διαδικασία εργασίας AMQP

Ο Publisher δημοσιεύει ένα μήνυμα μέσω του Exchange.

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

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

Μηχανισμός ανταλλαγής μηνυμάτων AMQP

Επιβεβαίωση μηνύματος

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

Οι δύο τρόποι επιβεβαίωσης μηνυμάτων του AMQP:

Λειτουργία αυτόματης επιβεβαίωσης: Διαγράψτε το μήνυμα μόλις σταλεί στον καταναλωτή από το ενδιάμεσο λογισμικό μηνυμάτων. (Χρησιμοποιώντας τη μέθοδο AMQP: basic.deliver ή basic.get-ok)
Λειτουργία ρητής επιβεβαίωσης: Περιμένετε μέχρι ο καταναλωτής να στείλει μια επιβεβαίωση πριν διαγράψετε το μήνυμα. (Χρησιμοποιώντας τη μέθοδο AMQP: basic.ack)
Εάν ένας καταναλωτής κλείσει το τηλέφωνο χωρίς να στείλει απόδειξη επιβεβαίωσης, ο πράκτορας AMQP παραδίδει ξανά το μήνυμα σε άλλον καταναλωτή. Εάν δεν υπάρχουν διαθέσιμοι καταναλωτές εκείνη τη στιγμή, ο μεσίτης μηνυμάτων περιμένει τον επόμενο καταναλωτή να εγγραφεί σε αυτήν την ουρά και στη συνέχεια προσπαθεί να παραδώσει ξανά.

Απόρριψη μηνυμάτων

Όταν ένας καταναλωτής λαμβάνει ένα μήνυμα, η διαδικασία επεξεργασίας μπορεί να επιτύχει ή να αποτύχει. Ο καταναλωτής μπορεί να υποδείξει στον μεσίτη μηνυμάτων (ενδιάμεσο λογισμικό μηνυμάτων) ότι το μήνυμα απέτυχε να υποβληθεί σε επεξεργασία (ή απέτυχε να ολοκληρωθεί σε αυτό το σημείο) λόγω "απορριφθέντος μηνύματος".
Όταν ένα μήνυμα απορρίπτεται, ο καταναλωτής μπορεί να πει στον μεσίτη μηνυμάτων τι να κάνει με το μήνυμα - να το καταστρέψει ή να το ξαναβάλει στην ουρά.

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

Στο AMQP, η μέθοδος basic.reject χρησιμοποιείται για την εκτέλεση της λειτουργίας απόρριψης μηνυμάτων. Ωστόσο, το basic.reject έχει έναν περιορισμό: δεν μπορείτε να το χρησιμοποιήσετε για να απορρίψετε πολλά μηνύματα με επιβεβαιώσεις. Αλλά αν χρησιμοποιείτε το RabbitMQ, μπορείτε να χρησιμοποιήσετε την επέκταση AMQP 0-9-1 που ονομάζεται αρνητικές επιβεβαιώσεις (ονομάζεται επίσης nacks) για να λύσετε αυτό το πρόβλημα.


Αρχικός:Η σύνδεση με υπερσύνδεσμο είναι ορατή.





Προηγούμενος:Οι πίνακες JS είναι η διαφορά και η χρήση του καθενός και μερικών
Επόμενος:Λεπτομερής επεξήγηση της αρχιτεκτονικής μηνυμάτων RabbitMQ AMQP
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com