未在PathChildrenCache上接收删除事件

时间:2015-04-21 18:00:02

标签: java listener apache-zookeeper service-discovery apache-curator

我使用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 个答案:

答案 0 :(得分: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();