Ρυθμίσεις μόνιμης συνδρομής ActiveMQ Ορίζοντας τη λειτουργία παράδοσης PERSISTENT για τον εκδότη, μπορείτε να χρησιμοποιήσετε μόνιμες συνδρομές για συνδρομητές, γεγονός που εγγυάται ότι το πρόγραμμα Pub/Sub λαμβάνει όλα τα δημοσιευμένα μηνύματα. Οι συνδρομές μηνυμάτων χωρίζονται σε μη διαρκείς συνδρομές και διαρκείς συνδρομές και οι μη ανθεκτικές συνδρομές μπορούν να λαμβάνουν μηνύματα που αποστέλλονται σε ένα θέμα μόνο όταν ο πελάτης είναι ενεργός, δηλαδή όταν ο πελάτης είναι εκτός σύνδεσης, τα μηνύματα που αποστέλλονται στο θέμα κατά τη διάρκεια αυτής της περιόδου θα χαθούν και δεν θα ληφθούν ποτέ. Όταν ο πελάτης είναι εκτός σύνδεσης, το ActiveMQ θα αποθηκεύσει όλα τα μηνύματα που αποστέλλονται στο θέμα σύμφωνα με το αναγνωριστικό του και όταν ο πελάτης συνδεθεί ξανά στο ActiveMQ, θα λάβει όλα τα μηνύματα που αποστέλλονται στο θέμα όταν είναι εκτός σύνδεσης. Οι μόνιμες συνδρομές αυξάνουν τα γενικά έξοδα και έχουν μόνο έναν ενεργό χρήστη σε μια μόνιμη συνδρομή κάθε φορά. Βήματα για τη δημιουργία μόνιμης συνδρομής: 1. Ορίστε ένα αναγνωριστικό πελάτη για τη σύνδεση. 2. Καθορίστε ένα όνομα συνδρομής για το θέμα της συνδρομής. Ο παραπάνω συνδυασμός πρέπει να είναι μοναδικός. Ο κώδικας υλοποιεί μόνιμες συνδρομές
(1) Όταν χρησιμοποιείτε ουρά, δηλαδή κατά την ουρά, υπάρχει μόνο ένας καταναλωτής ανά μήνυμα, επομένως η επιμονή είναι πολύ απλή, απλώς αποθηκεύστε το στη βάση δεδομένων
。 Στη συνέχεια, οποιοσδήποτε καταναλωτής μπορεί να το παραλάβει και να το πετάξει. Δεν έχει σημασία αν ένας καταναλωτής το απενεργοποιήσει για λίγο.
(2) Όταν χρησιμοποιείτε θέμα, δηλαδή κατά την εγγραφή, κάθε μήνυμα μπορεί να έχει πολλούς καταναλωτές, κάτι που είναι πιο ενοχλητικό.
Πρώτον, αν υποτεθεί ότι οι καταναλωτές είναι απλοί καταναλωτές, ------------------------ Μετά την κυκλοφορία του <1> κυκλοφόρησε το activemq, κυκλοφόρησε το news 1, αλλά δυστυχώς, κανένας καταναλωτής δεν ξεκινά τώρα, δηλαδή κανένας καταναλωτής δεν έχει εγγραφεί. Έτσι
, η είδηση εγκαταλείφθηκε.
<2> Ο καταναλωτής 1 ξεκίνησε, συνδέθηκε στο activemq, εγγράφηκε και περίμενε ένα μήνυμα~~
Το activemq δημοσιεύει το μήνυμα 2, OK, ο καταναλωτής 1 το λαμβάνει και το επεξεργάζεται. Εγκατάλειψη μηνύματος.
<3> Το Consumer 2 κυκλοφορεί επίσης, συνδέεται στο activemq, εγγράφεται και περιμένει ένα μήνυμα~~
Το activemq δημοσιεύει το μήνυμα 3, OK, καταναλωτής 1, καταναλωτής 2 λαμβάνονται και υποβάλλονται σε επεξεργασία. Εγκατάλειψη μηνύματος.
<4> Ο καταναλωτής 1 είναι απενεργοποιημένος.
Το activemq δημοσιεύει το μήνυμα 4, OK, ο καταναλωτής 2 το λαμβάνει και το επεξεργάζεται. Εγκατάλειψη μηνύματος.
<5> Το Consumer 1 ξεκίνησε ξανά.
Το activemq δημοσιεύει τα μηνύματα 5, OK, καταναλωτή 1 και καταναλωτή 2 όλα τα λαμβάνουν και τα επεξεργάζονται. Εγκατάλειψη μηνύματος. ----------------------------- Εν κατακλείδι: Το ActiveMQ απλώς στέλνει μηνύματα στον καταναλωτή που έχει ξεκινήσει αυτήν τη στιγμή. Οι καταναλωτές που απενεργοποιούνται θα χάσουν πολλά μηνύματα και δεν θα μπορούν να τα λάβουν ξανά.
Εάν το μήνυμα που αποστέλλεται είναι σημαντικά δεδομένα συγχρονισμού χρήστη και τα χάνει, τα δεδομένα χρήστη δεν συγχρονίζονται.
Λοιπόν, πώς μπορείτε να κάνετε τους καταναλωτές να λαμβάνουν αναπάντητα μηνύματα κατά την επανεκκίνηση;
Η απάντηση είναι μια μόνιμη συνδρομή. -----------------------------
Οι συνηθισμένες συνδρομές, χωρίς διάκριση μεταξύ των καταναλωτών, αν υπάρχουν λίγα κεφάλια στο χώρο, ρίξτε μερικά ψωμάκια στον ατμό. Για μόνιμες συνδρομές, πρέπει να καταγράψετε το όνομα του καταναλωτή. Ο Ζανγκ Σαν είπε, είμαι ο Ζανγκ Σαν, υπάρχουν ψωμάκια στον ατμό για μένα, θα επιστρέψω να τα πάρω. Ο Λι Σι είπε, είμαι ο Λι Σι, υπάρχουν ψωμάκια στον ατμό για μένα, θα επιστρέψω να τα πάρω. activemq έγραψε τα ονόματα των Zhang San και Li Si.
Στη συνέχεια, όταν χωρίζετε τα ψωμάκια στον ατμό, το ένα κεφάλι εξακολουθεί να δίνει ένα ψωμάκι στον ατμό. Μετά τη διαίρεση, όταν είδε ότι ο Ζανγκ Σαν δεν μιλούσε, σήμαινε ότι δεν ήταν εκεί, οπότε αφήστε του ένα. Ο Λι Σι μίλησε, οπότε δεν χρειαζόταν να μείνει.
Ο Ζανγκ Σαν επέστρεψε, έψαξε για activemq και έριξε μια ματιά, αυτός δεν είναι ο Ζανγκ Σαν, φέρτε γρήγορα τα ψωμάκια του στον ατμό. Μπορεί να είναι ένα ψωμάκι στον ατμό ή μπορεί να είναι 100 ψωμάκια στον ατμό, εξαρτάται από το πόσα ψωμάκια στον ατμό έχει μοιράσει ο Ζανγκ Σαν από τότε που έφυγε για λίγο.
Το activemq διακρίνει τους καταναλωτές με βάση το clientID και το όνομα συνδρομητή. ----------------------------- Δημιουργία σύνδεσης σύνδεση = connectionFactory.createConnection(); connection.setClientID("bbb"); Οι μόνιμες συνδρομές απαιτούν τη ρύθμιση. connection.start();
Δημιουργία συνεδρίας Συνεδρία = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
Δημιουργία προορισμού Θέμα θέματος = session.createTopic("userSyncTopic"); Όνομα θέματος
MessageConsumer καταναλωτής = session.createConsumer(θέμα); Τακτική συνδρομή MessageConsumer καταναλωτής = session.createDurableSubscriber(θέμα;"bbb"); Μόνιμες συνδρομές
Ένα άλλο σημείο είναι ότι ο παραγωγός του μηνύματος χρησιμοποιεί μόνιμη λειτουργία κατά την αποστολή μηνυμάτων Παραγωγός MessageProducer = ...; producer.setDeliveryMode(DeliveryMode.PERSISTENT); Εάν όχι, είναι επίμονο από προεπιλογή
(5) Εάν χρησιμοποιείται το ίδιο "clientID", θεωρείται ότι πρόκειται για τον ίδιο καταναλωτή. Εάν δύο προγράμματα χρησιμοποιούν το ίδιο "clientID", μόνο ένα μπορεί να συνδεθεί στο activemq ταυτόχρονα και η δεύτερη σύνδεση θα αναφέρει σφάλμα.
(6) Οι ρυθμίσεις του activemq είναι σε conf/activemq.xml και τα προεπιλεγμένα μηνύματα αποθηκεύονται στο data/kahadb και τα μηνύματα δεν θα χαθούν κατά την επανεκκίνηση του activemq.
Μπορείτε να αποκτήσετε πρόσβαση σε http://localhost:8161/admin/index.jsp: προβολή πληροφοριών σχετικά με τις τρέχουσες ουρές, τα θέματα και τους μόνιμους συνδρομητές, αποστολή μηνυμάτων και πολλά άλλα.
Μπορείτε να αντιγράψετε το περιεχόμενο στο activemq-jdbc.xml και να το τροποποιήσετε και μπορείτε να αποθηκεύσετε το μήνυμα σε άλλες βάσεις δεδομένων. |