【问题标题】:Not receiving remove events on PathChildrenCache未收到 PathChildrenCache 上的删除事件
【发布时间】:2015-04-21 18:00:01
【问题描述】:

我使用 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 注册服务时,我得到了一个附加事件。但是当我取消注册服务时,我没有收到删除的事件。

如何正确监听服务事件?

【问题讨论】:

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


    【解决方案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();
    

    【讨论】:

      猜你喜欢
      • 2017-05-18
      • 2011-07-05
      • 1970-01-01
      • 2019-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-22
      • 2016-11-02
      相关资源
      最近更新 更多