385.4. 使用案例


385.4.1. 从 z 节点读取

以下片段将读取来自 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 标头包含来自该 WatchedEvent 的 ZooKeeper 的 EventType 值。如果最初读取数据(未由 WatchedEvent触发)将不设置 CamelZookeeperEventType 标头。

385.4.3. 写入 z 节点

以下片段将交换的有效负载写入位于 /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 版本 也可以通过设置为 DELETE 来使用标头 CamelZookeeperOperation 删除节点

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 enumeration 中的名称:

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

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

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.