384.4. ユースケース

384.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");

384.4.2. znode からの読み取り (追加の Camel 2.10 以降)

ZooKeeper アンサンブルから受信した WatchedEvent が原因でデータが読み取られると、CamelZookeeperEventType ヘッダーには、その WatchedEvent からの ZooKeeper の EventType 値が保持されます。データが最初に読み取られる場合 (WatchedEvent によってトリガーされない場合)、CamelZookeeperEventType ヘッダーは設定されません。

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 からのパスにデータを書き込みます。

警告

ZooKeeper に保存されるデータはバイトベースであるため、testPayload はbyte[] に変換可能である必要があります。

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 以降では、ヘッダー CamelZookeeperOperationDELETE に設定することで、ノードを 削除する こともできます。

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 のいずれかです。各タイプの詳細については、こちら を参照してください。デフォルトでは、エンドポイントは unsequenced で ephemeral であるノードを作成しますが、タイプは 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 を使用します。

警告

ZooKeeper に保存されるデータはバイトベースであるため、testPayload はbyte[] に変換可能である必要があります。

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