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 アンサンブルから受信した WatchedEvent
が原因でデータが読み取られると、CamelZookeeperEventType
ヘッダーには、その WatchedEvent
からの ZooKeeper の EventType
値が保持されます。データが最初に読み取られる場合 (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
からのパスにデータを書き込みます。
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 以降では、ヘッダー 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' のいずれかです。各タイプの詳細は、こちら を参照してください。デフォルトでは、エンドポイントは 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");