第192章 ZooKeeper


ZooKeeper

Camel 2.9 以降で利用可能
ZooKeeper コンポーネントは、ZooKeeper クラスターとの対話を許可し、以下の機能を Camel に公開します。
  1. ZooKeeper 作成モードのいずれかのノードの作成。
  2. 任意のクラスターノードのデータコンテンツを取得および設定します(設定されるデータは byte[]に変換する必要があります)。
  3. 特定のノードに割り当てられている子ノードの一覧を作成して取得します。
  4. ZooKeeper によって調整された Leader 選択を利用して、エクスチェンジを処理する必要があるかどうかを判断する Distributed RoutePolicy
Maven ユーザーは、このコンポーネントの pom.xml に以下の依存関係を追加する必要があります。
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-zookeeper</artifactId>
    <version>2.17.0.redhat-630xxx</version>
    <!-- use the same version as your Camel core version -->
</dependency>
Copy to Clipboard Toggle word wrap

Camel on EAP デプロイメント

このコンポーネントは、Red Hat JBoss Enterprise Application Platform (JBoss EAP) コンテナー上で簡素化されたデプロイメントモデルを提供する Camel on EAP (Wildfly Camel) フレームワークによってサポートされます。このモデルの詳細は、Deploying into a Web Server の Apache Camel on JBoss EAP の章を参照してください

URI 形式

zookeeper://zookeeper-server[:port][/path][?options]
Copy to Clipboard Toggle word wrap
uri のパスは、エンドポイントのターゲットとなる ZooKeeper サーバー(別名 znode)のノードを指定します。

オプション

Expand
名前 デフォルト値 説明
path ZooKeeper サーバー(別名 znode)のノード
listChildren false ノードの子をリストすべきかどうか。
repeat false znode への変更は監視され、繰り返し処理される必要があります。
backoff 5000 再試行する前にエラーをバックオフする間隔。
timeout 5000 タイムアウトする前に接続を待機する時間間隔。
create false まだ存在していない場合は、エンドポイントがノードを作成するはずです。
createMode EPHEMERAL 新規に作成されたノードに使用する create モード(以下を参照)。
sendEmptyMessageOnDelete true Camel 2.10: znode の削除で、空のメッセージがコンシューマーに送信される必要がある

ユースケース

znode からの読み取り。

以下のスニペットは、すでに存在している場合に znode '/somepath/somenode/' からデータを読み取ります。取得したデータはエクスチェンジに置かれ、残りのルートに渡されます。
from("zookeeper://localhost:39913/somepath/somenode").to("mock:result");
Copy to Clipboard Toggle word wrap
ノードが存在しない場合は、エンドポイントの作成を待たせるフラグを指定できます。
from("zookeeper://localhost:39913/somepath/somenode?awaitCreation=true").to("mock:result");
Copy to Clipboard Toggle word wrap

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

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

znode への書き込み。

以下のスニペットは、エクスチェンジのペイロードを '/somepath/somenode/' にすでに存在している場合に znode に書き込みます。
from("direct:write-to-znode").to("zookeeper://localhost:39913/somepath/somenode");
Copy to Clipboard Toggle word wrap
エンドポイントを使用すると、ターゲットの znode をメッセージヘッダーとして動的に指定することができます。文字列 CamelZooKeeperNode でキーのヘッダーが存在する場合、ヘッダーの値はサーバー上の znode へのパスとして使用されます。たとえば、上記の同じルート定義を使用する場合、以下のコードスニペットは /somepath/somenode ではなく、ヘッダー /somepath/someothernode からパスに書き込みます。ZooKeeper に保存されているデータはバイトベースであるため、testPayloadbyte[] に変換する必要があります。
Object testPayload = ...
template.sendBodyAndHeader("direct:write-to-znode", testPayload, "CamelZooKeeperNode", "/somepath/someothernode");
Copy to Clipboard Toggle word wrap
ノードが存在しない場合にも作成するには、'create' オプションを使用する必要があります。
from("direct:create-and-write-to-znode").to("zookeeper://localhost:39913/somepath/somenode?create=true");
Copy to Clipboard Toggle word wrap
バージョン 2.11 以降では、'DELETE' に設定してヘッダー 'CamelZookeeperOperation' を使用してノードを 削除 することもできます。
from("direct:delete-znode").setHeader(ZooKeeperMessage.ZOOKEEPER_OPERATION, constant("DELETE")).to("zookeeper://localhost:39913/somepath/somenode");
Copy to Clipboard Toggle word wrap
または同等に
<route>
  <from uri="direct:delete-znode" />
  <setHeader headerName="CamelZookeeperOperation">
     <constant>DELETE</constant>
  </setHeader>
  <to uri="zookeeper://localhost:39913/somepath/somenode" />
</route>
Copy to Clipboard Toggle word wrap
ZooKeeper ノードは異なるタイプを持つことができます。これらは 'Ephemeral' または 'Persistent' および 'Sequenced' または 'Unsequenced' にすることができます。各タイプの詳細は、を参照して ください。デフォルトでは、エンドポイントは、配列されていない一時ノードを作成しますが、タイプは uri 設定パラメーターまたは特別なメッセージヘッダーを介して簡単に操作できます。create モードに想定される値は、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");
Copy to Clipboard Toggle word wrap
または、ヘッダー CamelZookeeperCreateMode を使用します。ZooKeeper に保存されているデータはバイトベースであるため、testPayloadbyte[] に変換する必要があります。
Object testPayload = ...
template.sendBodyAndHeader("direct:create-and-write-to-persistent-znode", testPayload, "CamelZooKeeperCreateMode", "PERSISTENT");
Copy to Clipboard Toggle word wrap

ZooKeeper が有効な Route ポリシー。

ZooKeeper では、追加設定なしで非常にシンプルで効果的なリーダーの選択が可能になります。このコンポーネントは、RoutePolicy でこの選択機能を悪用し、ルートが有効であるタイミングと方法を制御します。このポリシーは通常、フェイルオーバーのシナリオで使用され、Camel ベースのサーバーのクラスター全体でルートの同一インスタンスを制御します。非常に一般的なシナリオは、クラスター全体で分散されるルートのインスタンスが複数あり、そのうちの 1 つのインスタンスのみが一度に実行される必要がある単純な Master-Slave 設定です。マスターが失敗した場合は、利用可能なスレーブから新規マスターを選択し、この新規マスターのルートを起動する必要があります。
このポリシーは、選出に関与する RoutePolicy のすべてのインスタンスで共通の znode パスを使用します。各ポリシーはこの ID をこのノードに書き込みます。zookeeper は書き込みを受信順に順序付けます。次に、ポリシーはノードの一覧を読み取り、その ID の投稿を確認します。この投稿は、ルートを開始する必要があるかどうかを判断するために使用されます。ポリシーは、クラスター全体で起動する必要があるルートインスタンスの数で起動時に設定され、リスト内の位置がこの値よりも小さい場合、そのルートが起動します。マスター/スレーブのシナリオでは、ルートはルートインスタンス 1 つで設定され、一覧の最初のエントリーのみがルートを起動します。すべてのポリシーは、リストへの更新を監視し、リストによってルートが開始される必要がある場合に再度計算されるかどうかを監視します。Zookeeper の Leader 選択機能の詳細は、このページ を参照してください。
以下の例では、選択にノード /someapplication/somepolicy を使用し、ノード一覧で上位 1 エントリーのみを起動するように設定されます。つまり、マスターを選択します。
ZooKeeperRoutePolicy policy = new ZooKeeperRoutePolicy("zookeeper:localhost:39913/someapp/somepolicy", 1);
from("direct:policy-controlled").routePolicy(policy).to("mock:controlled");
Copy to Clipboard Toggle word wrap
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat