3

I'm using Apache Curator for service discovery, and PathChildrenCache to listen for events when a service is added/updated/deleted.

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();

When I register a service through org.apache.curator.x.discovery.ServiceDiscovery, I got an added event. But when I un-register a service I don't get the removed event.

How I could properly listen to service events?

bachr
  • 5,780
  • 12
  • 57
  • 92

1 Answers1

1

I've endup using ServiceCacheListener as follows (the problem is you need a ServiceCache instance for each service you want to watch):

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();
bachr
  • 5,780
  • 12
  • 57
  • 92