385.4.3. 写入 znode
以下片段会将交换的有效负载写入在已存在的 /somepath/somenode/ 提供的 znode 中:
from("direct:write-to-znode")
.to("zookeeper://localhost:39913/somepath/somenode");
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");
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");
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");
from("direct:delete-znode")
.setHeader(ZooKeeperMessage.ZOOKEEPER_OPERATION, constant("DELETE"))
.to("zookeeper://localhost:39913/somepath/somenode");
或者同等:
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");
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");
Object testPayload = ...
template.sendBodyAndHeader("direct:create-and-write-to-persistent-znode", testPayload, "CamelZooKeeperCreateMode", "PERSISTENT");