385.4. 使用案例


385.4.1. 从 znode读取

以下片段将从 znode/somepath/somenode/ 中读取它已存在的数据。检索的数据将放入交换中,并传递给路由的其余部分:

from("zookeeper://localhost:39913/somepath/somenode").to("mock:result");

如果节点尚不存在,则可以提供标志来让端点等待其创建:

from("zookeeper://localhost:39913/somepath/somenode?awaitCreation=true").to("mock:result");

385.4.2. 从 znode 读取(额外 Camel 2.10 开始)

当因为从 ZooKeeper ensemble 收到的 WatchedEvent 中读取数据时,CamelZookeeperEventType 标头包含来自该 WatchedEventEventType 值。如果初始读取数据(不是由 WatchedEvent触发),则不会设置 CamelZookeeperEventType 标头。

385.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 必须转换为 byte[],因为 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 配置参数或特殊消息标头轻松操作。create 模式预期的值只是来自 CreateMode 枚举的名称:

  • 持久性
  • 持久性_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 必须转换为 byte[],因为 ZooKeeper 中存储的数据是基于字节的。

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

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.