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

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

Όριο παράλληλης επεξεργασίας καταναλωτή RabbitMQ BasicQos

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 10/4/2018 10:36:02 μ.μ. | | | |


Πρώτα απ 'όλα, έχουμε 100 μη επεξεργασμένα μηνύματα στον διακομιστή rabbitmq, ανοίγουμε έναν πελάτη καταναλωτή τυχαία και θα εμφανιστεί η ακόλουθη κατάσταση:

100 κομμάτια δεδομένων, όλα ωθημένα σε μια στιγμή, αλλά δεν μπορούμε να επεξεργαστούμε τόσα πολλά δεδομένα ταυτόχρονα με έναν μόνο πελάτη, τι πρέπει να κάνουμε;




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

Φανταστείτε, εάν, εμείς οι μεμονωμένοι καταναλωτές μπορούμε να επεξεργαστούμε έως και 60 μηνύματα σε 1 λεπτό, ωστόσο, ένας παραγωγός μπορεί να στείλει 300 μηνύματα σε 1 λεπτό, εάν,Έχουμε έναν πελάτη καταναλωτή που χρειάζεται να λαμβάνει 300 μηνύματα ταυτόχρονα σε 1 λεπτό, κάτι που έχει υπερβεί το μέγιστο φορτίο μας, γεγονός που μπορεί να οδηγήσει σε εξάντληση των πόρων του διακομιστή και κόλλημα του πελάτη καταναλωτή
Το RabbitMQ παρέχει μια δυνατότητα qoS (Quality of Service)., δηλαδή, υπό την προϋπόθεση της μη αυτόματης επιβεβαίωσης των μηνυμάτων, εάν ένας συγκεκριμένος αριθμός μηνυμάτων (ορίζοντας την τιμή του Qos με βάση την κατανάλωση ή το κανάλι) δεν επιβεβαιωθεί, τα νέα μηνύματα δεν θα καταναλωθούν.



προφόρτωσηΜέγεθος:0
prefetchCount: Λέει στο RabbitMQ να μην προωθεί περισσότερα από N μηνύματα σε έναν καταναλωτή ταυτόχρονα, δηλαδή όταν υπάρχουν N μηνύματα που δεν έχουν ακόμη ενεργοποιηθεί, ο καταναλωτής θα αποκλείσει μέχρι να υπάρξει ένα μήνυμα ack
global:true\false Εάν οι παραπάνω ρυθμίσεις εφαρμόζονται σε κανάλια, για να το θέσω απλά, εάν οι παραπάνω περιορισμοί είναι σε επίπεδο καναλιού ή σε επίπεδο καταναλωτή
Σημείωση: Λέγεται ότι το prefetchSize και το global δεν υλοποιούνται από το rabbitmq, οπότε δεν θα τα μελετήσω προς το παρόν


prefetch_count τίθεται σε ισχύ όταν no_ask=falseΔηλαδή, στην περίπτωση της αυτόματης απάντησης, αυτές οι δύο τιμές είναιΔεν ισχύειτης

Ορίστε prefetchCount = 3 μέσω της μεθόδου BasicQos. Αυτό επιτρέπει στο RabbitMQ να επεξεργάζεται έως και 3 μηνύματα ανά καταναλωτή ταυτόχρονα. Με άλλα λόγια, δεν θα διανείμει νέα μηνύματα στον καταναλωτή μέχρι να λάβει το ack. Δείτε πώς μπορείτε να το ρυθμίσετε:





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

Εισαγωγή επίσημης ιστοσελίδας: http://www.rabbitmq.com/consumer-prefetch.html

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





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

Mail To:help@itsvse.com