título: Mensajería Pub/Sub en caché: descripción general: información sobre NCache Pub/Sub Messaging, sus editores, suscripciones, temas y más.
canónico: https://www.alachisoft.com/resources/docs/ncache/prog-guide/publish-subscribe-ncache.html
Mensajería Pub/Sub en caché: descripción general
Este paradigma de mensajería de publicación/suscripción (Pub/Sub) proporciona un canal intermediario (llamado tema) para intercambiar mensajes entre múltiples aplicaciones sin ningún conocimiento del remitente (editor) y el receptor (suscriptor). Una aplicación de editor envía mensajes a una aplicación de suscriptor a través de temas.
Dado que todos los modelos Pub/Sub requieren un canal de comunicación, NCache actúa como un medio para los temas para que el editor publique el mensaje en el tema. Los suscriptores reciben el mensaje a través del tema como una notificación. Usando NCache como medio para los temas garantiza un acoplamiento flexible dentro del modelo pub/sub y permite una mayor abstracción, proporcionando beneficios adicionales a los temas distribuidos.
Note
Esta característica también está disponible en NCache Professional.
Además de un caché distribuido, NCache también proporciona un dedicado Caché de mensajería Pub/Sub.
Importante:
Recomendamos una caché de Pub/Sub dedicada por los siguientes motivos:
Desalojos: si el caché contiene mensajes y elementos de caché, la expulsión frecuente de elementos de caché también puede eliminar los mensajes antes de reenviarlos al suscriptor.
Transferencia de estado: La transferencia de estado agrega un costo a cada operación de elemento de caché. Dado que los mensajes se publican, retransmiten y caducan con frecuencia, esta actividad recurrente puede resultar costosa porque desencadena la transferencia de estado.
Por qué es importante la mensajería Pub/Sub
Los eventos en tiempo real requieren el intercambio de notificaciones entre diferentes aplicaciones en arquitecturas distribuidas basadas en eventos. Los patrones de Pub/Sub permiten a los editores compartir eventos con los suscriptores para que cualquier procesamiento deseado tenga lugar cuando ocurra un evento de interés.
Por ejemplo, un grupo de suscriptores puede estar interesado en información sobre los detalles del envío del pedido para poder procesarla y realizar un seguimiento de la entrega del pedido. Por lo tanto, se suscribirán a un tema que transmite mensajes con detalles del pedido. Una vez que el editor publique un mensaje sobre el tema, los suscriptores serán notificados y recibirán el mensaje que contiene los detalles del pedido para su posterior procesamiento.
Componentes de pub/sub
Los componentes básicos de la NCache El modelo de suscriptor editor (Pub/Sub) se enumera a continuación y se analiza en detalle más adelante:
Tema: Un lugar donde se publican mensajes.
Autor: Una aplicación (aplicación web, aplicaciones de escritorio, microservicios) que publica mensajes en tema/temas
Abonado: Una aplicación interesada en recibir mensajes de temas/temas.
Suscripción: Una entidad de interés creada para que un suscriptor reciba mensajes previstos.
Mensaje: El objeto de datos real que el publicador envía y los suscriptores reciben a través del tema.
Tema
El editor publica mensajes sobre el tema. Los suscriptores se suscriben al tema para recibir el mensaje. Este tema existe en forma distribuida en NCache. Por lo tanto, su creación ocurre en todos los nodos del clúster. Contiene el almacén de mensajes, que almacena los objetos de datos reales que el editor publica en una cola. También mantiene internamente una lista de todos los suscriptores que se suscriben y una lista de editores.
El ITopic/Topic
interfaz facilita creación de tema, obtener temay borrado de tema. También puedes eliminar un tema de forma asíncrona para evitar la espera de que se elimine un tema.
Note
La naturaleza distribuida de los temas y los mensajes subyacentes mejora la escalabilidad.
Una vez que se publica un mensaje en el tema, se activa un evento, que el tema transmite a los suscriptores según la preferencia de opción de envío de mensajes para que puedan recibir el mensaje según sea necesario. La siguiente figura ilustra el papel de un tema como canal intermediario para editores y suscriptores:
Note
En caso de desconexión temporal del suscriptor y luego reconexión automática, toda la información relacionada con un tema, como suscripciones y notificaciones de eventos de falla, se vuelve a registrar en el tema sin ninguna interrupción por parte del suscriptor.
Prioridad del tema
NCache introduce la prioridad a nivel de tema que lo ayuda a priorizar los temas de menor y mayor prioridad en función de su importancia. Puede crear Temas con mayor prioridad si necesitan publicar mensajes críticos. Entonces, esos mensajes se entregan primero. Del mismo modo, puede crear temas con una prioridad más baja si publican mensajes sin importancia. El caché expulsará estos mensajes primero.
Importante:
La prioridad de un tema solo se puede especificar en el momento de la creación del tema y no se puede modificar posteriormente.
Simplemente puede configurar el prioridad a nivel de tema en el momento de la creación del tema para priorizar la entrega de mensajes críticos.
Notificación de eliminación de tema
Todos los mensajes y la metainformación relacionada del caché se eliminan al eliminar el tema. Por tanto, el suscriptor y el editor reciben notificaciones de esta eliminación por los siguientes motivos:
- Es posible que los suscriptores estén esperando mensajes entrantes del tema registrado. Una vez que se elimina el tema, los suscriptores pueden manejar su ejecución en consecuencia mediante la notificación de eventos y evitar un estado de espera infinito.
- El editor puede evitar enviar mensajes a un tema inexistente y manejar los mensajes pendientes y la ejecución futura en consecuencia.
Para recibir una notificación de eliminación de tema, su aplicación se registra para el evento OnTopicDeleted.
Publicar mensajes en un tema
Un editor puede publicar mensajes a un tema especificando un nombre de tema. Los mensajes se pueden publicar de forma asincrónica y masiva para mejorar el rendimiento de la aplicación. Una caché particionada distribuye mensajes en todo el clúster. Para el enrutamiento de mensajes, cada mensaje tiene una identificación única llamada MessageID
en el extremo del editor, y el código hash de MessageID
determina el nodo del clúster para almacenar el mensaje.
Note
NCache permite publicar una gran cantidad de mensajes en una sola llamada para mejorar el rendimiento y el uso de la memoria.
NCache permite a un editor usar las siguientes propiedades al publicar mensajes.
Opción de envío de mensajes: Un editor puede decidir si un mensaje se entregará a un solo suscriptor o se transmitirá a todos los suscriptores en el momento de la publicación mediante opción de envío de mensajes.
Caducidad del mensaje: El editor puede establecer la caducidad de un mensaje para controlar la vida útil de un mensaje en la caché. Hemos cubierto el vencimiento con más detalle en el Mensajes .
Notificación de falla en la entrega del mensaje: Un editor puede registrarse para MessageDeliveryFailure para recibir una notificación si un mensaje en particular no se pudo entregar. Estos escenarios de fallas en la entrega se elaboran con más detalle en el Asignación de mensajes y entrega a suscripción .
Importante:
La notificación de falla en la entrega de mensajes es solo para los mensajes con vencimiento.
- Notificación de eliminación de tema: Un editor puede registrarse para notificación de eliminación de tema para evitar la publicación indebida de los mensajes correspondientes una vez eliminado el tema.
Suscríbete a un tema
Una aplicación de suscriptor puede suscríbete a mensajes temáticos registrándose en un tema de interés a través de una suscripción. En Pub/Sub, una suscripción representa el interés de un suscriptor que se muestra en un tema en particular.
Note
En caso de que se agregue un nuevo nodo al clúster de caché y se active la transferencia de estado, todas las suscripciones junto con los mensajes y los datos de caché se replican en el nuevo nodo.
NCache permite suscribirse a un tema proporcionando un nombre de tema o un patrón. Para obtener más detalles, consulte Métodos de suscripción. Además, también puede establecer modo de entrega de mensajes como síncrono o asíncrono al crear una suscripción.
NCache proporciona varios tipos de suscripciones de Pub/Sub que se analizan a continuación.
Suscripción y sus tipos
Suscripciones en NCache se puede clasificar en los siguientes tipos:
Durable
Note
Una suscripción duradera es una suscripción con nombre.
En un suscripción duradera, la caché garantiza que el suscriptor no se pierda ningún mensaje en caso de desconexión debido al cierre de la aplicación/máquina, el reinicio de la aplicación o un fallo de la red. Por lo tanto, las suscripciones duraderas no se ven afectadas por la desconexión y reconexión del suscriptor.
Note
Las suscripciones duraderas no se eliminan a menos que el suscriptor se dé de baja correctamente.
Si se desconecta un suscriptor, los mensajes destinados a este suscriptor se almacenan en un servidor hasta que el suscriptor se reincorpora o los mensajes caducan. Las suscripciones duraderas no se eliminan automáticamente al desconectarse el suscriptor, a menos que el suscriptor se haya dado de baja correctamente.
Una suscripción duradera se clasifica además como:
Compartido: Una suscripción compartida y duradera significa que varios suscriptores comparten una suscripción con nombre. Los mensajes asignados a una suscripción compartida luego se equilibran en la carga entre los suscriptores de forma rotativa. Incluso si algún suscriptor abandona la red, los mensajes continúan su envío a los suscriptores activos. Por lo tanto, si un suscriptor se va de manera elegante o abrupta después de una asignación, sus mensajes asignados se reasignan a otros suscriptores activos.
Importante:
Una suscripción compartida solo es compatible con una suscripción duradera.
En una suscripción compartida, la suscripción permanecerá en el tema y no se puede cancelar la suscripción hasta que todos los suscriptores hayan cancelado la suscripción. Esto significa que mientras haya un solo suscriptor activo, la suscripción permanecerá activa.
- Exclusivo: Una suscripción duradera exclusiva significa que solo hay un suscriptor activo registrado en una suscripción a la vez. Si un suscriptor se da de baja con gracia, la suscripción exclusiva se puede asignar a un nuevo suscriptor. Si un suscriptor abandona abruptamente, la nueva solicitud de suscripción se acepta después de esperar un tiempo de inactividad. Los mensajes asignados siempre quedan ahí aunque no haya abonado.
no duradero
En un suscripción no duradera, los suscriptores solo reciben mensajes destinados a él mientras permanece conectado. Si el suscriptor abandona la red, no recibirá mensajes publicados durante su período de desconexión. Una suscripción no duradera es exclusiva por defecto.
Importante:
Los suscriptores perderán mensajes si el suscriptor se reinicia.
Además, las suscripciones no duraderas se eliminan automáticamente cuando el suscriptor abandona la red. Esto significa que si ese suscriptor se vuelve a unir o establece la conexión nuevamente, se considerará una nueva suscripción.
Caducidad de la suscripción duradera
solicite establecer el vencimiento de una suscripción duradera. Por ejemplo, si no hay un suscriptor activo durante un tiempo significativo. Aquí las suscripciones caducan después de un período específico de inactividad. Cuando vence una suscripción duradera, los mensajes asignados a esta suscripción se reasignan según el DeliveryOption
de estos mensajes.
Note
Cada vez que el suscriptor realiza una encuesta o realiza cualquier otra actividad, se restablece el tiempo de vencimiento de la suscripción.
Manejo de suscripciones inactivas
Note
Solo las suscripciones no duraderas se marcan como inactivas y esto no se aplica a las suscripciones duraderas.
En caso de que no haya un suscriptor activo contra una suscripción después de esperar un cierto período inactivo, la suscripción se considera caducada. Si un suscriptor se reincorpora después de la desconexión durante el período inactivo, podrá recibir sus mensajes asignados.
Importante:
Las suscripciones inactivas deben gestionarse para evitar la sobrecarga de memoria en el lado del servidor.
Después de esperar el período de inactividad, la suscripción caduca y sus mensajes asignados se reasignarán a otras suscripciones. La reasignación de mensajes depende de la opción de entrega de mensajes.
Si el mensaje asignado a la suscripción A tenía la opción de entrega configurada en TODOS y ya está asignado a otra suscripción B antes de que expire la suscripción A, no será necesaria la reasignación.
Si el mensaje asignado a una suscripción tenía una opción de entrega configurada en CUALQUIER y la suscripción vence, los mensajes asignados siempre se reasignarán a cualquier otra suscripción.
Mensaje
Un mensaje contiene el objeto de datos real que envía el editor y se entrega a los suscriptores a través del tema. Una vez que el editor publica el mensaje sobre el tema, se notifica a los suscriptores registrados que se ha publicado un mensaje sobre su interés. En el caso de varios mensajes, se almacenan en una secuencia dentro de la cola de un tema en particular.
Note
El mismo mensaje se puede asignar a varios temas. Esto se identifica de forma única a través de una identificación generada automáticamente.
Aquí, analizamos más a fondo la asignación de mensajes a la suscripción, la entrega de mensajes y el mecanismo de reconocimiento.
Asignación de mensajes y entrega a suscripción
Inicialmente, los mensajes no están asignados en el lado del servidor. Todas las suscripciones reciben mensajes según el DeliveryOption
. Una vez que se produce una asignación de suscripción, el suscriptor recibe una notificación. Luego, el suscriptor implementa un mecanismo de encuesta para obtener varios mensajes de forma masiva, a fin de reducir la sobrecarga del lado del servidor. Después de recibir los mensajes, el suscriptor envía el acuse de recibo y los mensajes se consideran entregados.
Note
Los mensajes se almacenan en el tema, si no hay ningún suscriptor que reciba los mensajes. Los mensajes se asignan y entregan al primer suscriptor tan pronto como se suscribe al tema.
Opción de entrega de mensajes
Un editor necesita especificar la opción de entrega del mensaje para decidir si el mensaje se entregará a un solo suscriptor o se transmitirá a todos los suscriptores en el momento de la publicación. Es importante tener en cuenta que la definición de entrega exitosa depende de la opción de entrega especificada.
Las dos opciones de entrega y los correspondientes criterios de entrega satisfactoria se describen a continuación:
Todas: Todos los suscriptores registrados reciben mensajes. Un mensaje se elimina cuando todos los suscriptores lo reconocen.
año: Cualquier suscriptor registrado recibe los mensajes. Si el suscriptor asignado no envía confirmación, los mensajes se reasignan al siguiente suscriptor. Si envían un acuse de recibo, los mensajes se consideran entregados correctamente.
Note
Si un mensaje se entrega correctamente de acuerdo con la opción de entrega especificada, se elimina de la memoria caché.
Almacenamiento y distribución de mensajes
Los siguientes son los aspectos importantes del almacenamiento y distribución de mensajes en la caché:
Los mensajes se distribuyen entre nodos según topologías.
Para las topologías Partición-Réplica y Particionado, se utiliza la distribución basada en hash.
Para la topología replicada, los mensajes se replican en todos los nodos de la memoria caché en clúster. Sin embargo, el nodo coordinador es responsable de la manipulación de mensajes.
Para la topología Mirror, los mensajes se publican en el nodo activo y luego se replican en el nodo pasivo según corresponda.
Si el almacén de mensajes está a punto de ser desalojado, se registra un evento que indica un almacenamiento de mensajes completo y el inicio del desalojo.
Los mensajes tienen una sobrecarga en la memoria caché. Por lo tanto, se debe tener en cuenta el tamaño del mensaje al calcular el tamaño de la memoria caché.
Comportamiento del mensaje
Aquí discutimos el comportamiento esperado de los mensajes en los siguientes casos:
En borrar caché: Los mensajes se eliminan junto con los elementos del caché una vez que se borra el caché.
Al reiniciar el caché: Similar a borrar caché, el contenido de la caché se borra cuando se reinicia la caché. Esto también incluye todos los temas y los mensajes contenidos en ellos.
Desalojo: If el desalojo está habilitado en una caché de Pub/Sub, los datos se expulsarán primero y luego los mensajes.
Cifrado y compresión: If cifrado y compresión está configurado en el nivel de caché, también se aplica a la carga útil del mensaje del tema.
transferencia estatal: En caso de transferencia de estado, cuando los mensajes se mueven a otro nodo en el clúster, el nodo donde finalmente se almacena el mensaje es el responsable de la entrega.
Notificación de falla en la entrega de mensajes
Importante:
Los suscriptores reciben una notificación de error de entrega cuando un mensaje que ha caducado vence antes de ser entregado a cualquiera de ellos.
En caso de que un mensaje no sea asignado o entregado a ninguno de los suscriptores, se considera un fracaso. Puede suceder cuando el suscriptor no existe o está inactivo debido a una falla en la red. En tal escenario, un editor puede registrar notificación de error en la entrega del mensaje. Es importante tener en cuenta que la notificación de falla de entrega es solo para mensajes con vencimiento. Se considera que la entrega de un mensaje ha fallado cuando un mensaje caduca antes de la entrega a cualquiera de los suscriptores.
Note
Si hay varios editores en un tema, la notificación de error se entregará a cualquiera de los editores activos que se haya registrado para recibir la notificación de error.
Vencimiento del mensaje
Similar a los elementos de caché, un editor puede establecer la caducidad de los mensajes. Los mensajes caducarán del caché tan pronto como haya pasado el intervalo de caducidad y utilizarán el mismo mecanismo de intervalo de limpieza.
La caducidad de un mensaje determina el tiempo que persiste en la memoria caché. Independientemente de la entrega, si un mensaje no se entrega, se eliminará después del tiempo de vencimiento. Si un mensaje se entrega con éxito antes de que caduque, se elimina de la memoria caché sin esperar el tiempo de caducidad.
Mensajes ordenados
NCache ahora admite mensajes ordenados donde la secuencia de los mensajes se mantiene en el lado del cliente. Un editor puede publicar mensajes ordenados especificando un nombre de secuencia para un fragmento de mensajes. Luego, los mensajes ordenados se entregan a los suscriptores en el mismo orden en que se publicaron. La cadena de secuencia debe ser la misma para una cadena de mensajes ordenados. Usando la cadena de secuencia, todos los mensajes residen en el mismo nodo usando el Afinidad de ubicación mecanismo.
Note
Modo de entrega síncrona se puede utilizar para mensajes ordenados.
Las siguientes son las características importantes de los mensajes ordenados:
Los mensajes de un editor con la misma secuencia residen en un solo nodo de caché.
Si
DeliveryOption
se establece en Cualquiera, todos los mensajes ordenados de la misma secuencia se entregan al mismo suscriptor. En caso de que el suscriptor específico pierda la conexión o no esté disponible, se reasignará un nuevo suscriptor para este fin. Sin embargo, si elDeliveryOption
se establece en Todo, entonces todos los mensajes ordenados de la misma secuencia se entregan a todos los suscriptores.En caso de transferencia de estado, los mensajes ordenados pueden perder su secuencia y ser publicados sin mantener el orden.
Los mensajes pedidos solo se pueden publicar mediante el modo de sincronización en la API de publicación. No se admiten las llamadas API masivas y asíncronas.
Monitoreo
NCache le brinda la capacidad de monitorear las estadísticas de Pub/Sub Topic y observar varios contadores de rendimiento a este respecto. La actividad y el estado de los temas de Pub/Sub se pueden monitorear a través de Contadores PerfMon de Windows y Herramientas de línea de comandos.
Confiabilidad y alta disponibilidad
NCache implementa el mecanismo de reconocimiento para la entrega de mensajes. Los mensajes se guardan en la memoria hasta que se entregan con éxito en función de la al menos una vez entrega criterios. Por eso, NCache garantiza la confiabilidad de la entrega de mensajes para Pub/Sub Messaging en arquitecturas distribuidas.
Además, la tolerancia a fallas de hasta un nodo en Topología de réplica de partición hace que la tienda de mensajería de Pub/Sub esté altamente disponible. Si un nodo abandona el clúster por cualquier motivo, la réplica tiene la copia de seguridad del mensaje.
En esta sección
Temas de Pub/Sub
Explica cómo crear, obtener y eliminar temas para el modelo Pub/Sub en NCache.
Publicar mensajes en un tema
Proporciona código de muestra que crea un tema y publica mensajes en él.
Suscríbete a un tema
Proporciona código de muestra para suscribirse a un tema y recibir mensajes de interés.
Eventos de publicación/suscripción
Explica los eventos de Pub/Sub para notificar al editor y al suscriptor acerca de varios eventos que suceden en la memoria caché y las aplicaciones.
Monitoreo de temas de Pub/Sub
Describe las formas en que se pueden monitorear las estadísticas de Pub/Sub a través de NCache Monitor, PerfMon y herramientas de línea de comandos.