Paramètres d’abonnement persistants ActiveMQ En définissant le mode de livraison PERSISTANTE pour l’éditeur, vous pouvez utiliser des abonnements persistants pour les abonnés, ce qui garantit que le programme Pub/Sub reçoit tous les messages publiés. Les abonnements aux messages sont divisés en abonnements non durables et abonnements durables, et les abonnements non durables ne peuvent recevoir des messages envoyés à un sujet que lorsque le client est actif, c’est-à-dire lorsque le client est hors ligne, les messages envoyés au sujet pendant cette période seront perdus et jamais reçus. Lorsque le client est hors ligne, ActiveMQ enregistre tous les messages envoyés au sujet selon son ID, et lorsque le client se reconnecte à ActiveMQ, il reçoit tous les messages envoyés au sujet lorsqu’il est hors ligne. Les abonnements persistants augmentent la surcharge et ne comportent qu’un seul utilisateur actif dans un abonnement persistant à la fois. Étapes pour établir un abonnement persistant : 1. Configurer un identifiant client pour la connexion ; 2. Spécifier un nom d’abonnement pour le sujet de l’abonnement ; La combinaison ci-dessus doit être unique. Le code implémente des abonnements persistants
(1) Lors de l’utilisation de la file d’attente, c’est-à-dire lors de la mise en file d’attente, il n’y a qu’un seul consommateur par message, donc la persistance est très simple, il suffit de l’enregistrer dans la base de données
。 Ensuite, tout consommateur peut la récupérer et la jeter. Peu importe si un consommateur l’éteint un moment.
(2) Lors de l’utilisation de topic, c’est-à-dire lors de l’abonnement, chaque message peut avoir plusieurs utilisateurs, ce qui est plus problématique.
Premièrement, en supposant que les consommateurs soient des consommateurs ordinaires, ------------------------ Après le lancement de <1> activemq, News 1 a été publié, mais malheureusement, aucun consommateur ne commence à démarrer pour l’instant, c’est-à-dire aucun consommateur ne s’est abonné. Ainsi
, la nouvelle a été abandonnée.
<2> Consommateur 1 a démarré, s’est connecté à activemq, s’est abonné, et a attendu un message~~
activemq publie le message 2, OK, le consommateur 1 le reçoit et le traite. Abandon de message.
<3> Consumer 2 est également lancé, connecté à activemq, abonné, et attend un message~~
activemq publie le message 3, OK, le consommateur 1, le consommateur 2 sont tous reçus et traités. Abandon de message.
<4> Consommateur 1 est désactivé.
activemq publie le message 4, OK, le consommateur 2 le reçoit et le traite. Abandon de message.
<5> Consommateur 1 a recommencé.
ActiveMQ publie les messages 5, OK, Consommateur 1 et Consommateur 2 qui les reçoivent et traitent tous. Abandon de message. ----------------------------- Pour résumer : Activemq envoie simplement des messages au consommateur actuellement lancé. Les consommateurs qui éteignent la ligne manqueront beaucoup de messages et ne pourront plus les recevoir.
Si le message envoyé contient des données de synchronisation utilisateur importantes et les manque, les données utilisateur ne sont pas synchronisées.
Alors, comment faire en sorte que les consommateurs reçoivent des messages manqués lorsqu’ils redémarrent ?
La réponse est un abonnement persistant. -----------------------------
Les abonnements ordinaires, sans distinction entre les consommateurs, s’il y a quelques têtes dans le lieu, lancez quelques brioches vapeur. Pour les abonnements persistants, vous devez enregistrer le nom du consommateur. Zhang San a dit : Je suis Zhang San, il y a des petits pains vapeur pour moi, je reviendrai les chercher. Li Si a dit : Je suis Li Si, il y a des petits pains vapeur pour moi, je reviendrai les chercher. activemq a noté les noms de Zhang San et Li Si.
Ensuite, lors de la division des petits pains vapeur, une tête donne toujours un pain cuit à la vapeur. Après la division, quand il vit que Zhang San ne parlait pas, cela signifiait qu’il n’était pas là, alors laisse-lui un message. Li Si parla, donc il n’y avait pas besoin de rester.
Zhang San revint, chercha l’activmq, et regarda, ce n’est pas Zhang San, apporte ses petits pains vapeur rapidement. Cela peut être un petit pain vapeur, ou 100 petits pains vapeur, cela dépend du nombre de petits pains vapeur que Zhang San a partagés depuis son départ.
activemq distingue les consommateurs par l’identifiant client et le nom de l’abonné. ----------------------------- Créer un lien connexion = connexionFactory.créeConnexion() ; connection.setClientID(« bbb ») ; Les abonnements persistants nécessitent de définir cela. connexion.start() ;
Créez une session Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE) ;
Créez une destination Sujet sujet = session.createTopic(« userSyncTopic ») ; Nom du sujet
MessageConsommateur consommateur = session.créerConsommateur(sujet) ; Abonnement régulier MessageConsommateur consommateur = session.createDurableSubscriber(topic,"bbb ») ; Abonnements persistants
Un autre point est que le producteur du message utilise le mode persistant lors de l’envoi de messages MessageProducteur producteur = ... ; producer.setDeliveryMode(DeliveryMode.PERSISTENT) ; Sinon, il est persistant par défaut
(5) Si le même « clientID » est utilisé, il est considéré comme le même consommateur. Si deux programmes utilisent le même « clientID », un seul peut se connecter à activemq en même temps, et la seconde connexion signalera une erreur.
(6) Les paramètres d’activemq sont en conf/activemq.xml, et les messages par défaut sont enregistrés dans data/kahadb, et les messages ne seront pas perdus lors du redémarrage d’activemq.
Vous pouvez accéder à http://localhost:8161/admin/index.jsp : voir des informations sur les files d’attente actuelles, les sujets et les abonnés persistants, envoyer des messages, et plus encore.
Vous pouvez copier le contenu du activemq-jdbc.xml et le modifier, et sauvegarder le message dans d’autres bases de données. |