本文仅为个人记录,方便以后查阅。
用途
项目中使用了 dubbo,注册中心使用的 zookeeper,使用 zookeeper 实现了一个简单的分布式锁(依赖 curator),因为配置文件存在 dubbo.registry 配置,为了直接使用这个地址来创建分布式锁,写了一个简单的方法来提取 zookeeper 地址。
效果
dubbo.registry 有多种配置方式,支持所有情况,下面是常见的例子和提取结果:
zookeeper://localhost:2181
zookeeper://localhost:2181?client=zkclient
zookeeper://localhost:2181?backup=localhost:2182,localhost:2183
zookeeper://localhost:2181?client=zkclient&backup=localhost:2182,localhost:2183
------------结果------------
Optional[localhost:2181]
Optional[localhost:2181]
Optional[localhost:2181,localhost:2182,localhost:2182]
Optional[localhost:2181,localhost:2183,localhost:2183]
代码
java.util.Optional; { PREFIX ; BACKUP ; Optional convertDubboRegistryToZookeeperURL( dubboRegistry){ zookeeperURL (); (dubboRegistry dubboRegistry.startsWith(PREFIX)){ dubboRegistry dubboRegistry.substring(PREFIX.length()); index dubboRegistry.indexOf(); (index ){ zookeeperURL.append(dubboRegistry.substring(, index)); dubboRegistry dubboRegistry.substring(index ); [] dubboRegistries dubboRegistry.split(); ( i ; i dubboRegistries.length; i) { (dubboRegistries[i].startsWith(BACKUP)){ [] backups dubboRegistries[i].substring(BACKUP.length()).split(); ( j ; j backups.length; j) { zookeeperURL.append().append(backups[i]); } } } } { zookeeperURL.append(dubboRegistry); } Optional.of(zookeeperURL.toString()); } Optional.empty(); } main([] args) { System.out.println(convertDubboRegistryToZookeeperURL()); System.out.println(convertDubboRegistryToZookeeperURL()); System.out.println(convertDubboRegistryToZookeeperURL()); System.out.println(convertDubboRegistryToZookeeperURL()); } }