Apache zookeeper Zookeeper CLI-读取带空格的Znode

Apache zookeeper Zookeeper CLI-读取带空格的Znode,apache-zookeeper,Apache Zookeeper,是否可以通过Zookeeper CLI读取带有空格的znode 我在区域下有两个值(“美国西部1”和“美国东部”) 我能读《美国东部》 [zk: localhost:2181(CONNECTED) 11] get /regions/us-east null cZxid = 0xa ctime = Tue Jul 10 12:41:49 IST 2012 mZxid = 0xa mtime = Tue Jul 10 12:41:49 IST 2012 pZxid = 0x1b cversion =

是否可以通过Zookeeper CLI读取带有空格的znode

我在区域下有两个值(“美国西部1”和“美国东部”)

我能读《美国东部》

[zk: localhost:2181(CONNECTED) 11] get /regions/us-east
null
cZxid = 0xa
ctime = Tue Jul 10 12:41:49 IST 2012
mZxid = 0xa
mtime = Tue Jul 10 12:41:49 IST 2012
pZxid = 0x1b
cversion = 9
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 9
但不是“美国西部1”

[zk: localhost:2181(CONNECTED) 11] get /regions/us-west 1
Node does not exist: /regions/us-west 

我尝试了诸如'%20'、'\'、'+'等选项。。为了空间,但什么都不起作用

看起来您将无法从ZK命令行客户端执行此操作。Zookeeper Java客户端(可能就是您正在使用的客户端)通过解析空白字符将命令(例如,
get
)与其参数(例如,
/regions/us west 1
)分离,正如您在客户端提供的代码(例如Zookeeper-3.3.5\src\Java\main\org\apache\Zookeeper\ZooKeeperMain.Java)中看到的那样:

由于它们是按“”拆分的,除非在调用
get
命令时通过某种转义找到克服
split
调用的方法,否则您将无法使用此客户端检索这些节点。上面的代码将
get
调用中的
1
解释为
watch
参数,如您在
get
命令语法中所见:

获取路径[监视]

我建议您使用一个不同的字符,例如“u”,而不是znodes命名上的空格。如果这不是一个选项,您需要自己修改ZK Java客户端,或者使用另一个客户端。

请尝试,如下所示:

$ zookeepercli --servers srv1,srv2,srv3 -c create "/demo_only 1" "the value"
$ zookeepercli --servers srv1,srv2,srv3 -c get "/demo_only 1" 
the value
zookeepercli是免费的开源软件。
免责声明:我是此工具的作者。

谢谢。这在一次事件中救了我,当时我有一个ZK节点,名称中有空格!
public boolean parseCommand( String cmdstring ) {
    String[] args = cmdstring.split(" ");
    if (args.length == 0){
        return false;
    }
    command = args[0];
    cmdArgs = Arrays.asList(args);
    return true;
}
$ zookeepercli --servers srv1,srv2,srv3 -c create "/demo_only 1" "the value"
$ zookeepercli --servers srv1,srv2,srv3 -c get "/demo_only 1" 
the value