<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>2.4.0</version>
</dependency>
使用 Server 改變url發(fā)送2次創(chuàng)建臨時節(jié)點:
public class Server {
public static void main(String[] args) {
// 1 重試策略:初試時間為1s 重試10次
RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 10);
// 2 通過工廠創(chuàng)建連接
CuratorFramework cf = CuratorFrameworkFactory.builder()
.connectString("localhost:2181")
.sessionTimeoutMs(1000 * 10)
.retryPolicy(retryPolicy)
.build();
// 3 開啟連接
cf.start();
try {
// 4. 模擬本機ip
cf.create().creatingParentsIfNeeded().withMode(CreateMode.EPHEMERAL).forPath("/urls/192.168.0.11");
Thread.sleep(200000000);
} catch (Exception e) {
e.printStackTrace();
}
}
}
啟動 Client
public class Client {
public static void main(String[] args) {
RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 10);
CuratorFramework cf = CuratorFrameworkFactory.builder()
.connectString("localhost:2181")
.sessionTimeoutMs(1000 * 10)
.retryPolicy(retryPolicy)
.build();
cf.start();
try {
final PathChildrenCache childrenCache = new PathChildrenCache(cf, "/urls", true);
childrenCache.start(PathChildrenCache.StartMode.POST_INITIALIZED_EVENT);
childrenCache.getListenable().addListener(
(client, event) -> {
switch (event.getType()) {
case CHILD_ADDED:
System.out.println("CHILD_ADDED: " + event.getData().getPath());
break;
case CHILD_REMOVED:
System.out.println("CHILD_REMOVED: " + event.getData().getPath());
break;
case CHILD_UPDATED:
System.out.println("CHILD_UPDATED: " + event.getData().getPath());
break;
default:
break;
}
}
);
List<String> urls = cf.getChildren().forPath("/urls");
for (String url : urls) {
System.out.println(url);
}
Thread.sleep(200000000);
} catch (Exception e) {
e.printStackTrace();
}
}
}
運行圖:

image.png
下掉一個節(jié)點之后:

image.png