Не получено удаление событий на PathChildrenCache
Я использую Apache Curator для обнаружения сервисов, и PathChildrenCache
прослушивать события, когда услуга добавлена / обновлена / удалена.
PathChildrenCache pathCache = new PathChildrenCache(client, "/directory", true);
pathCache.getListenable().addListener(new PathChildrenCacheListener() {
@Override
public void childEvent(CuratorFramework client, PathChildrenCacheEvent event) throws Exception {
if(event.getType() == PathChildrenCacheEvent.Type.CHILD_ADDED) {
System.out.println("Added");
}else if(event.getType() == PathChildrenCacheEvent.Type.CHILD_UPDATED) {
System.out.println("Updated");
}else if(event.getType() == PathChildrenCacheEvent.Type.CHILD_REMOVED) {
System.out.println("Removed");
}
}
}
pathCache.start();
Когда я регистрирую сервис через org.apache.curator.x.discovery.ServiceDiscovery
Я получил добавленное событие. Но когда я отменяю регистрацию сервиса, я не получаю удаленное событие.
Как я мог правильно слушать сервисные события?
1 ответ
Я в конечном итоге с помощью ServiceCacheListener
следующим образом (проблема в том, ServiceCache
экземпляр для каждого сервиса, который вы хотите посмотреть):
ServiceCache<String> serviceCache = serviceDiscovery.serviceCacheBuilder().name("my-service").build();
serviceCache.addListener(new ServiceCacheListener() {
@Override
public void stateChanged(CuratorFramework client, ConnectionState newState)
{
log.debug("State changed");
}
@Override
public void cacheChanged()
{
log.debug("Cache changed");
}
}, Executors.newSingleThreadExecutor());
serviceCache.start();