Configuración persistente de suscripción de ActiveMQ Al configurar el modo de entrega PERSISTENT para el editor, puedes usar suscripciones persistentes para suscriptores, lo que garantiza que el programa Pub/Sub reciba todos los mensajes publicados. Las suscripciones de mensajes se dividen en suscripciones no duraderas y suscripciones duraderas, y las suscripciones no duraderas solo pueden recibir mensajes enviados a un tema cuando el cliente está activo, es decir, cuando el cliente está desconectado, los mensajes enviados al tema durante este periodo se perderán y nunca se recibirán. Cuando el cliente está fuera de línea, ActiveMQ guardará todos los mensajes enviados al sujeto según su ID, y cuando el cliente se conecte de nuevo a ActiveMQ, recibirá todos los mensajes enviados al sujeto cuando esté desconectado. Las suscripciones persistentes aumentan la sobrecarga y solo tienen un usuario activo en una suscripción persistente a la vez. Pasos para establecer una suscripción persistente: 1. Configurar un ID de cliente para la conexión; 2. Especificar un nombre de suscripción para el tema de la suscripción; La combinación anterior debe ser única. El código implementa suscripciones persistentes
(1) Cuando se usa cola, es decir, al hacer cola, solo hay un consumidor por mensaje, por lo que la persistencia es muy sencilla, solo tienes que guardarlo en la base de datos
。 Luego, cualquier consumidor puede recogerlo y desecharlo. No importa si un consumidor lo apaga durante un tiempo.
(2) Al usar el tema, es decir, al suscribirse, cada mensaje puede tener varios usuarios, lo que resulta más problemático.
Primero, suponiendo que los consumidores son consumidores corrientes, ------------------------ Tras el lanzamiento de <1> activemq, se publicó News 1, pero desafortunadamente, ningún consumidor está empezando ahora, es decir, ningún consumidor se ha suscrito. Así que
, la noticia fue abandonada.
<2> Usuario 1 arrancó, se conectó a activemq, me suscribí y esperó un mensaje~~
activemq publica el mensaje 2, OK, el consumidor 1 lo recibe y procesa. Abandono del mensaje.
<3> también se ha lanzado Consumer 2, está conectado a activemq, está suscrito y está esperando un mensaje~~
activemq publica el mensaje 3, OK, consumidor 1, consumidor 2 son recibidos y procesados. Abandono del mensaje.
<4> Consumidor 1 está apagado.
activemq publica el mensaje 4, OK, el consumidor 2 lo recibe y procesa. Abandono del mensaje.
<5> Consumer 1 volvió a empezar.
ActiveMQ publica los mensajes 5, OK, Consumidor 1 y Consumidor 2, todos recibiéndolos y procesándolos. Abandono del mensaje. ----------------------------- En resumen: Activemq simplemente envía mensajes al consumidor que ya está lanzado. Los consumidores que apaguen perderán muchos mensajes y no podrán volver a recibirlos.
Si el mensaje enviado son datos importantes de sincronización de usuario y no los detectan, los datos de usuario no se sincronizan.
Entonces, ¿cómo consigues que los consumidores reciban mensajes perdidos cuando reinician?
La respuesta es una suscripción persistente. -----------------------------
Las suscripciones normales, sin distinguir entre consumidores, si hay algunas cabezas en el recinto, lanzan algunos bollos al vapor. Para suscripciones persistentes, necesitas registrar el nombre del consumidor. Zhang San dijo: Soy Zhang San, hay bollos al vapor para mí, volveré a por ellos. Li Si dijo: Soy Li Si, hay bollos al vapor para mí, volveré a por ellos. activemq anotó los nombres de Zhang San y Li Si.
Luego, al separar bollos al vapor, una cabeza sigue dando un bollo al vapor. Después de la división, cuando vio que Zhang San no hablaba, significó que no estaba, así que déjale uno. Li Si habló, así que no había necesidad de quedarse.
Zhang San volvió, buscó activmq y echó un vistazo, este no es Zhang San, trae sus bollos al vapor rápido. Puede ser un bollo al vapor, o puede ser 100 bollos al vapor, depende de cuántos bollos al vapor haya dividido Zhang San desde que se fue un tiempo.
activemq distingue a los consumidores por el identificador del cliente y el nombre del suscriptor. ----------------------------- Crear una conexión conexión = conexiónFábrica.createConnection(); connection.setClientID("bbb"); Las suscripciones persistentes requieren configurar esto. conexión.inicio();
Crea una sesión Sesión de sesión = conexión.createSession(false,Session.AUTO_ACKNOWLEDGE);
Crear un destino Tema de tema = sesión.createTopic("userSyncTopic"); Nombre del tema
MensajeConsumidor consumidor = sesión.createConsumidor(tema); Suscripción regular MensajeConsumidor consumidor = sesión.createDurableSubscriber(topic,"bbb"); Suscripciones persistentes
Otro punto es que el productor del mensaje utiliza el modo persistente al enviar mensajes MensajeProductor productor = ...; producer.setDeliveryMode(DeliveryMode.PERSISTENT); Si no, es persistente por defecto
(5) Si se utiliza el mismo "clienteID", se considera el mismo consumidor. Si dos programas usan el mismo "clientID", solo uno puede conectarse a activemq al mismo tiempo, y la segunda conexión informará de un error.
(6) La configuración de activemq está en conf/activemq.xml, y los mensajes por defecto se guardan en data/kahadb, y los mensajes no se perderán al reiniciar activemq.
Puedes acceder a http://localhost:8161/admin/index.jsp: ver información sobre colas actuales, temas y suscriptores persistentes, enviar mensajes y más.
Puedes copiar el contenido del activemq-jdbc.xml y modificarlo, y puedes guardar el mensaje en otras bases de datos. |