Principio detallado de Zookeeper (2): mecanismo de monitoreo del observador
Zookeeper proporciona funciones de suscripción y publicación de datos distribuidos. Un sistema modelo de publicación y suscripción típico define una relación de suscripción de uno a muchos, lo que permite que varios suscriptores supervisen los objetos de un determinado tema al mismo tiempo. Cuando el estado de este objeto de tema cambie, se notificará a todos los suscriptores para que puedan manejarlo en consecuencia.
El mecanismo Watcher se introduce en Zookeeper para implementar esta función de notificación distribuida. Zookeeper permite al cliente registrar un Watcher en el servidor. Cuando algunos eventos en el servidor activan el mecanismo de monitoreo de Watcher, se enviará una notificación de evento al cliente especificado para implementar la función de notificación distribuida.
Tipos de eventos desencadenantes: creación de nodo, eliminación de nodo, cambio de nodo, cambio de nodo secundario, etc.
En términos generales, Watcher se puede dividir en los siguientes tres procesos: el cliente registra el Watcher en el servidor, el evento del servidor activa el Watcher y el cliente vuelve a llamar al Watcher para obtener el evento desencadenante.
Activador único
Cuando un evento activa el monitoreo, se enviará un evento de vigilancia al cliente donde se establece el monitoreo. Este efecto es único y es el mismo evento. ocurrirá más tarde. El mecanismo no se activará.
Encapsulación de eventos
Zookeeper utiliza el objeto WatchedEvent para encapsular y entregar eventos del lado del servidor.
WatchedEvent contiene tres atributos básicos de cada evento:
Estado de notificación (keeperState), tipo de evento (EventType), ruta del nodo (path)
Envío asincrónico del evento
Los eventos de notificación de Watcher se envían de forma asincrónica desde el servidor al cliente.
Regístrese primero y luego active
El mecanismo Watch de Zookeeper requiere que el cliente se registre para monitorear en el servidor y el servidor activará el mecanismo de monitoreo antes de que se notifique al cliente.
El mismo tipo de evento tiene diferentes significados en diferentes estados de notificación. La siguiente tabla enumera estados de notificación y tipos de eventos comunes.
Encapsulación de eventos: se encapsulan los eventos obtenidos por Watcher, incluidos tres contenidos: keeperState, eventType, path
Entre ellos, el evento de estado de conexión (tipo = Ninguno, ruta = nulo ) No es necesario el registro del cliente, y el cliente puede manejarlo directamente siempre que lo necesite.
4. Monitor de configuración del cliente Shell
Establecer monitoreo de cambios de datos de nodo:
Cambiar datos de nodo a través de otro cliente:
En este momento , se notifica al nodo configurado para escuchar:
5.ZooKeeperJava?Operación API
La API de Java utilizada para operar Zookeeper aquí es un conjunto del marco de cliente Curator de zookeeper, que resuelve muchos problemas de Zookeeper Trabajo de desarrollo detallado de muy bajo nivel en el lado del cliente.
Curator contiene varios paquetes:
curator-framework: alguna encapsulación de la API subyacente de zookeeper
curator-recipes: encapsulación de algunas funciones avanzadas, como: Caché monitoreo de eventos, elecciones, bloqueos distribuidos, contadores distribuidos, etc.
Dependencias de Maven (la versión de curador utilizada: 2.12.0, la versión correspondiente de Zookeeper es: 3.4.x, si hay versiones cruzadas ) Los problemas de compatibilidad pueden provocar que falle la operación del nodo):
1. Introduzca las coordenadas de Maven
2.