分布式配置中心是ZooKeeper的一个常见应用场景,它允许在分布式系统中集中管理配置信息,使得配置的变更能够实时生效,而无需重新部署应用。下面是一个简单的Java代码示例,展示了如何使用ZooKeeper来实现一个基本的分布式配置中心。
示例代码基于curator
库来实现,确保你的项目中引入了curator
的依赖。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| import org.apache.curator.framework.CuratorFramework; import org.apache.curator.framework.CuratorFrameworkFactory; import org.apache.curator.framework.recipes.cache.NodeCache; import org.apache.curator.retry.ExponentialBackoffRetry; import org.apache.curator.utils.CloseableUtils;
public class DistributedConfigCenter { private final CuratorFramework client; private final String configPath;
public DistributedConfigCenter(String connectString, String configPath) { this.client = CuratorFrameworkFactory.newClient(connectString, new ExponentialBackoffRetry(1000, 3)); this.configPath = configPath; client.start(); }
public String getConfigValue() throws Exception { byte[] data = client.getData().forPath(configPath); return new String(data); }
public void watchConfigChanges() throws Exception { NodeCache nodeCache = new NodeCache(client, configPath); nodeCache.getListenable().addListener(() -> { if (nodeCache.getCurrentData() != null) { String newValue = new String(nodeCache.getCurrentData().getData()); System.out.println("Config changed: " + newValue); } }); nodeCache.start(); }
public void close() { CloseableUtils.closeQuietly(client); }
public static void main(String[] args) throws Exception { String connectString = "localhost:2181"; String configPath = "/myApp/config";
DistributedConfigCenter configCenter = new DistributedConfigCenter(connectString, configPath);
String value = configCenter.getConfigValue(); System.out.println("Initial config value: " + value);
configCenter.watchConfigChanges();
Thread.sleep(5000); configCenter.client.setData().forPath(configPath, "newConfigValue".getBytes());
Thread.sleep(10000); configCenter.close(); } }
|
在上述代码中,DistributedConfigCenter
类封装了配置中心的基本功能。通过getConfigValue
方法获取配置值,通过watchConfigChanges
方法监听配置变更。在示例的main
方法中,首先创建一个ZooKeeper客户端并初始化配置中心,然后获取初始配置值,并监听配置变更。当配置发生变化时,会输出新的配置值。
请注意,这只是一个简单的示例,实际项目中还需要考虑更多的异常处理、线程安全、定时刷新等问题。同时,还可以根据具体需求扩展更多的功能,如支持不同环境的配置、配置权限控制等。