Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 13505|Respuesta: 2

Configuración persistente de suscripción de ActiveMQ

[Copiar enlace]
Publicado en 9/1/2017 11:12:10 | | |

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.




Anterior:Acceso a billetes 360 5 generaciones canal VIP roto, entra rápidamente en la cola VIP
Próximo:. Plataforma .Net
 Propietario| Publicado en 9/1/2017 13:41:53 |
1 Comparación de características técnicas de cola y tema
nombre
Tema
Cola
Resumen
Publicar Suscribirse mensajes Publicar mensajes de suscripción
Punto a punto punto
No existe ningún estado
Los datos de temas son sin estado por defecto.
Los datos de la cola se guardan como archivo en el servidor MQ por defecto; por ejemplo, Active MQ suele almacenarse bajo $AMQ_HOME\data\kr-store\data. También puede configurarse como una tienda de bases de datos.
Garantía de integridad
No hay garantía de que cada dato publicado por el editor sea aceptado por el suscriptor.
La cola garantiza que cada dato pueda ser recibido por el receptor.
si el mensaje se perderá
En términos generales, cuando un editor publica un mensaje sobre un tema, solo el sub que escucha la dirección del tema puede recibir el mensaje. Si no hay un subforo escuchando, el tema se pierde.
El Remitente envía un mensaje a la Cola de destino, y el receptor puede recibir mensajes en esta Cola de forma asíncrona. Los mensajes en la Cola no se perderán si no hay un receptor que los recoja por el momento.
Política de recepción de liberación de mensajes
Política de publicación y recepción de mensajes uno a muchos, varios subreddits que escuchan la misma dirección de tema pueden recibir mensajes enviados por el editor. El sub recibe la notificación al servidor mq
Políticas de publicación y recepción de mensajes uno a uno, los mensajes enviados por un remitente solo pueden ser recibidos por un receptor. Después de que el receptor recibe, el servidor MQ notifica al servidor MQ que ha sido recibido, y el servidor MQ elimina o toma otras acciones sobre los mensajes de la cola.

 Propietario| Publicado en 9/1/2017 13:42:15 |
La mayor diferencia entre tema y cola es que el tema se presenta en forma de difusión, notificando a todos los clientes de escucha en línea que hay un nuevo mensaje, y el cliente sin monitorización no recibirá el mensaje; Queue, en cambio, notifica a uno de varios clientes de escucha de forma peer-to-peer.

2 Comparación de la eficiencia del procesamiento de mensajes entre métodos de topic y de cola
        Aumentando el número de concurrencias del cliente que escucha, verifica si el envío de mensajes del tema disminuirá significativamente debido al aumento de la concurrencia del cliente que escucha.
        A partir de los resultados medidos, no hay una diferencia significativa en la eficiencia de enviar y recibir mensajes enviados por el método del tema bajo la premisa de un suscriptor y 100 suscriptores, pero bajo la premisa de una concurrencia de 500 suscriptores (hilos), la diferencia de eficiencia es evidente (debido a la concurrencia de 500 hilos, la tasa de uso de la CPU de mi máquina es tan alta como un 70-90%, por lo que es imposible confirmar si se trata de un cuello de botella de rendimiento causado por mi prueba local o de un cuello de botella en el método de envío de mensajes del tema). lo que resulta en una disminución tan significativa de la eficiencia).
        No hay una diferencia significativa en la eficiencia de enviar y recibir mensajes enviados mediante el método de tema y el modo cola bajo la premisa de un suscriptor y 100 suscriptores, pero bajo la premisa de una concurrencia de 500 suscriptores, la eficiencia del modo tema es significativamente menor que la de la cola.
        La eficiencia de enviar y recibir mensajes enviados en el método de cola no cambia significativamente bajo la premisa de un suscriptor, 100 y 500 suscriptores.
Datos medidos por el tema:


El número total de mensajes enviados por el remitente
El número total de mensajes recibidos por todos los suscriptores
El tiempo medio que tarda en enviar y recibir mensajes
Abonado único
100
100
101ms
100 suscriptores
100
10000
103 ms
500 suscriptores
100
50000
14162 ms

Datos medidos en cola:


El número total de mensajes enviados por el remitente
El número total de mensajes recibidos por todos los suscriptores
El tiempo medio que tarda en enviar y recibir mensajes
Abonado único
100
100
96ms
100 suscriptores
100
100
96ms
500 suscriptores
100
100
100ms

Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com