384.4.3. 写入 znode

以下片段会将交换的有效负载写入在已存在的 /somepath/somenode/ 提供的 znode 中:

from("direct:write-to-znode")
    .to("zookeeper://localhost:39913/somepath/somenode");

为获得灵活性,端点允许将目标 znode 动态指定为消息标头。如果存在字符串 CamelZooKeeperNode 的标头键,则标头的值将用作服务器上 znode 的路径。对于使用上述相同路由定义的实例,以下代码片段会将数据不写入 /somepath/somenode,而是指向标头 /somepath/someothernode 的路径。

警告

testPayload 必须可以被转换为 字节[],因为 ZooKeeper 中存储的数据基于字节。

Object testPayload = ...
template.sendBodyAndHeader("direct:write-to-znode", testPayload, "CamelZooKeeperNode", "/somepath/someothernode");

如果节点不存在,则应使用 create 选项。

from("direct:create-and-write-to-znode")
    .to("zookeeper://localhost:39913/somepath/somenode?create=true");

启动 2.11 版本 也可以通过将标头 CamelZookeeperOperation 设置为 DELETE 来删除 节点:

from("direct:delete-znode")
    .setHeader(ZooKeeperMessage.ZOOKEEPER_OPERATION, constant("DELETE"))
    .to("zookeeper://localhost:39913/somepath/somenode");

或者同等:

<route>
  <from uri="direct:delete-znode" />
  <setHeader headerName="CamelZookeeperOperation">
     <constant>DELETE</constant>
  </setHeader>
  <to uri="zookeeper://localhost:39913/somepath/somenode" />
</route>

zookeeper 节点可以有不同的类型,可以是 'Ephemeral' 或 'Persistent' 和 'Sequenced' 或 'Unsequenced'。有关您可以在 此处查看 每种类型的更多信息。默认情况下,端点将创建不透明的临时节点,但该类型可以通过 uri 配置参数或特殊消息标头来轻松操作。创建模式的值只是来自 CreateMode 枚举的名称:

  • PERSISTENT
  • PERSISTENT_SEQUENTIAL
  • EPHEMERAL
  • EPHEMERAL_SEQUENTIAL

例如,通过 URI 配置创建持久性 znode

from("direct:create-and-write-to-persistent-znode")
    .to("zookeeper://localhost:39913/somepath/somenode?create=true&createMode=PERSISTENT");

或者使用标头 CamelZookeeperCreateMode

警告

testPayload 必须可以被转换为 字节[],因为 ZooKeeper 中存储的数据基于字节。

Object testPayload = ...
template.sendBodyAndHeader("direct:create-and-write-to-persistent-znode", testPayload, "CamelZooKeeperCreateMode", "PERSISTENT");