网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

从dubbozookeeper注册地址提取出zookeeper地址的方法

用途

成都创新互联是一家专业提供同安企业网站建设,专注与成都网站建设、做网站H5技术、小程序制作等业务。10年已为同安众多企业、政府机构等服务。创新互联专业的建站公司优惠进行中。

项目中使用了 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]

代码

import java.util.Optional;
public class ZookeeperURL {
  public static final String PREFIX = "zookeeper://";
  public static final String BACKUP = "backup=";
  public static Optional convertDubboRegistryToZookeeperURL(String dubboRegistry){
    StringBuilder zookeeperURL = new StringBuilder();
    if(dubboRegistry != null && dubboRegistry.startsWith(PREFIX)){
      dubboRegistry = dubboRegistry.substring(PREFIX.length());
      int index = dubboRegistry.indexOf("?");
      if(index > 0){
        zookeeperURL.append(dubboRegistry.substring(0, index));
        dubboRegistry = dubboRegistry.substring(index + 1);
        String[] dubboRegistries = dubboRegistry.split("&");
        for (int i = 0; i < dubboRegistries.length; i++) {
          if(dubboRegistries[i].startsWith(BACKUP)){
            String[] backups = dubboRegistries[i].substring(BACKUP.length()).split(",");
            for (int j = 0; j < backups.length; j++) {
              zookeeperURL.append(",").append(backups[i]);
            }
          }
        }
      } else {
        zookeeperURL.append(dubboRegistry);
      }
      return Optional.of(zookeeperURL.toString());
    }
    return Optional.empty();
  }
  public static void main(String[] args) {
    System.out.println(convertDubboRegistryToZookeeperURL("zookeeper://localhost:2181"));
    System.out.println(convertDubboRegistryToZookeeperURL("zookeeper://localhost:2181?client=zkclient"));
    System.out.println(convertDubboRegistryToZookeeperURL("zookeeper://localhost:2181?backup=localhost:2182,localhost:2183"));
    System.out.println(convertDubboRegistryToZookeeperURL("zookeeper://localhost:2181?client=zkclient&backup=localhost:2182,localhost:2183"));
  }
}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对创新互联的支持。如果你想了解更多相关内容请查看下面相关链接


本文名称:从dubbozookeeper注册地址提取出zookeeper地址的方法
网页网址:http://bjjierui.cn/article/gcsoho.html

其他资讯