Куратор - это библиотека, созданная для облегчения работы с Apache Zookeeper. PathChildrenCache
работает с использованием наблюдателей ZK.
Наблюдатель создает одноразовые часы. Если наблюдатель получает уведомление об изменении (или любой другой операции, на которую он подписан), то Наблюдатель использует Наблюдатель, и он должен снова создать новый Наблюдатель, чтобы в дальнейшем получать уведомление.
В вашем случае PathChildrenCache
ищет изменения в узле. Это работает так, чтобы подождать, пока он не получит уведомление от ZK, и заново создать Watch, чтобы продолжить поиск дальнейших изменений.
Поскольку все асинхронно, данные могли изменяться много раз, прежде чем вы получите уведомление об изменении , Вот почему, когда вы устанавливаете задержку в Updater, вы можете видеть все изменения, потому что у кеша достаточно времени, чтобы обнаружить изменение и воссоздать Watch, прежде чем будет вызван новый setData
. Когда вы опускаете режим сна, это происходит так быстро, что в кеше пропускаются некоторые события.
Для дальнейшего чтения, пожалуйста, ознакомьтесь с официальной документацией о наблюдателях, главным образом в этом разделе:
Поскольку часы запускаются один раз, и существует задержка между получением события и отправкой нового запроса на получение часов, вы не можете надежно увидеть каждое изменение, которое происходит с узлом в ZooKeeper. Будьте готовы разобраться со случаем, когда znode меняется несколько раз между получением события и настройкой часов снова. (Вам может быть все равно, но хотя бы понять, что это может произойти.)