Fuse 6 is no longer supported
As of February 2025, Red Hat Fuse 6 is no longer supported. If you are using Fuse 6, please upgrade to Red Hat build of Apache Camel.第47章 ファブリックコンポーネント
概要
Fabric コンポーネントは、Apache Camel エンドポイントの場所検出メカニズムを実装します。このメカニズムを使用して、エンドポイントのクラスター上で負荷分散を提供することもできます。クライアント側(プロデューサーエンドポイント)では、エンドポイントは抽象 ID で表され、実行時に ID は特定のエンドポイント URI に解決されます。URI は(Fuse Fabric によって提供される)分散レジストリーに格納されるため、デプロイ時にトポロジーを動的に指定できる柔軟なアプリケーションを作成できます。
Dependencies リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Fabric コンポーネントは、ファブリックが有効な Red Hat JBoss Fuse コンテナーのコンテキストでのみ使用できます。
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
fabric-camel
機能がインストールされていることを確認する必要があります。Fabric のコンテキストでは、該当するプロファイルに追加して機能をインストールします。たとえば、my-master-profile
というプロファイルを使用している場合は、以下のコンソールコマンドを入力して fabric-camel
機能を追加します。
karaf@root> fabric:profile-edit --features fabric-camel my-master-profile
karaf@root> fabric:profile-edit --features fabric-camel my-master-profile
注記
fabric コンポーネントを適切に使用するには、
fabric-zookeeper
や fabric-commands
などのプロファイルを追加してください。ただし、jetty エンドポイントを使用している場合は、camel-jetty
機能を含めます。
URI 形式 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
ファブリックエンドポイントには、以下の URI 形式があります。
fabric:ClusterID[:PublishedURI[?Options]]
fabric:ClusterID[:PublishedURI[?Options]]
URI の形式は、コンシューマーエンドポイントまたはプロデューサーエンドポイントを指定するために使用されるかどうかによって異なります。
Fabric コンシューマーエンドポイント の場合、URI 形式は次のとおりです。
fabric:ClusterID:PublishedURI[?Options]
fabric:ClusterID:PublishedURI[?Options]
指定した URI
PublishedURI
がファブリックレジストリーに公開され、ClusterId
クラスターに関連付けられます。オプション Options
はコンシューマーエンドポイントインスタンスの作成時に使用されますが、オプションはファブリックレジストリーの PublishedURI
で公開され ません。
Fabric プロデューサーエンドポイント の場合、URI 形式は次のとおりです。
fabric:ClusterID
fabric:ClusterID
クライアントはファブリックレジストリーで ID
ClusterId
を検索し、接続する URI を検出します。
URI オプション リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Fabric コンポーネント自体は URI オプションをサポートし ません。ただし、公開された URI にオプションを指定することもできます。これらのオプションは URI の一部としてファブリックレジストリーに保存され、以下のように使用されます。
- サーバーに のみ適用されるサーバーのみのオプション- オプションは、実行時にサーバーエンドポイント(コンシューマーエンドポイント)に適用されます。
- クライアントに のみ適用されるクライアントのみのオプション- オプションは、実行時にクライアントエンドポイント(プロデューサーエンドポイント)に適用されます。
- クライアントとサーバーに共通する一般的 なオプション- クライアントとサーバーの両方に適用されます。
ファブリックエンドポイントのユースケース リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Fabric エンドポイントは基本的に Apache Camel エンドポイントの検出メカニズムを提供します。たとえば、以下の基本的なユースケースをサポートします。
- 「ロケーションの検出」 の形式にする必要があります。
- 「Load-balancing クラスター」 の形式にする必要があります。
ロケーションの検出 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
図47.1「Fabric によるロケーションの検出」 では、Fabric エンドポイントが実行時にロケーションの検出を有効にする方法の概要を説明します。
図47.1 Fabric によるロケーションの検出
このアプリケーションのサーバー側は、Fabric エンドポイントで始まるルートによって定義され、Fabric エンドポイントは URI
jetty:http://0.0.0.0:9090
を公開します。このルートが起動すると、クラスター ID foo
の下にある fabric レジストリーの Jetty URI が自動的に登録されます。
アプリケーションのクライアント側は、Fabric エンドポイント
fabric:foo
で終わるルートによって定義されます。クライアントルートが起動すると、ファブリックレジストリーで ID foo
が自動的に検索され、関連付けられた Jetty エンドポイント URI が取得されるようになりました。その後、クライアントは検出された Jetty URI を使用してプロデューサーエンドポイントを作成し、対応するサーバーポートに接続します。
Load-balancing クラスター リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
図47.2「Fabric による負荷分散」 では、Fabric エンドポイントが負荷分散クラスターを作成できる方法の概要を説明します。
図47.2 Fabric による負荷分散
この場合、URI (
jetty:http://0.0.0.0:9090
)および jetty:http://0.0.0.0:9191
で 2 つの Jetty サーバーが作成されます。これらの公開された URI には fabric:foo:
の接頭辞が付けられるため、両方の Jetty URI はファブリックレジストリーの 同じ クラスター ID foo
の下に登録されます。
クライアントルートが起動すると、ファブリックレジストリーで ID
foo
が自動的に検索されるようになりました。foo
ID は複数のエンドポイント URI に関連付けられているため、ファブリックはランダム負荷分散アルゴリズムを実装し、利用可能な URI のいずれかを選択します。その後、クライアントは選択した URI を使用してプロデューサーエンドポイントを作成します。
自動再接続機能 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
fabric エンドポイントは自動再接続をサポートします。そのため、クライアントエンドポイント(producer エンドポイント)がそのサーバーエンドポイントへの接続を失うと、自動的にファブリックレジストリーに戻り、別の URI を要求してから、新しい URI に接続します。
エンドポイント URI の公開 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
ファブリックレジストリーでエンドポイント URI
PublishedURI
を公開するには、パブリッシャー構文 FabricScheme:ClusterID:PublishedURI
で fabric エンドポイントを定義します。この構文は、コンシューマーエンドポイント(つまり、from
DSL コマンドに表示されるエンドポイント)でのみ使用できることに注意してください。
例47.1「URI の公開 」 は Jetty HTTP サーバーを実装するルートを示しています。ここでは、Jetty URI は ID
cluster
の下のファブリックレジストリーに公開されます。ルートは、HTTP 応答の本文で定数メッセージ Response from Zookeeper agent
を返す単純な HTTP サーバーです。
例47.1 URI の公開
前述の例について、以下の点に注意してください。
- Fabric コンポーネントは、
CuratorFramework
オブジェクトを使用して ZooKeeper サーバー(Fabric レジストリー)に接続します。ここで、CuratorFramework
オブジェクトへの参照が自動的に提供されます。 from
DSL コマンドは、ファブリック URIfabric-camel:cluster:jetty:http://0.0.0.0:9090/fabric
を定義します。ランタイム時に、以下の 2 つのことが発生します。- 指定された
jetty
URI はクラスター IDcluster
の下のファブリックレジストリーに公開されます。 - Jetty エンドポイントはアクティベートされ、ルートのコンシューマーエンドポイントとして使用されます(
fabric-camel:cluster:
接頭辞なしで指定された場合のみ)。
ルートは Blueprint XML に実装されているため、通常、このコードを含むファイルを Maven プロジェクトの
src/main/resources/OSGI-INF/blueprint
ディレクトリーに追加します。
エンドポイント URI の検索 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
fabric レジストリーで URI を検索する場合は、
FabricScheme:ClusterID
の形式で、ID で fabric エンドポイント URI を指定するだけです。この構文は、プロデューサーエンドポイントで使用されます(例: to
DSL コマンドに表示されるエンドポイント)。
例47.2「URI の検索」 は、ファブリックレジストリーで指定された ID
cluster
を検索して、実行時に HTTP エンドポイントが動的に検出される HTTP クライアントを実装するルートを示しています。
例47.2 URI の検索
ルートは Blueprint XML に実装されているため、通常、このコードを含むファイルを Maven プロジェクトの
src/main/resources/OSGI-INF/blueprint
ディレクトリーに追加します。
負荷分散の例 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
基本的には、ファブリックエンドポイントを使用すると、負荷分散の実装が簡単になります。必要なのは、同じ クラスター ID の下に複数のエンドポイント URI を公開することだけです。クライアントがそのクラスター ID を検索すると、利用可能なエンドポイント URI の一覧からランダムに選択できるようになりました。
負荷分散クラスターのサーバーはほぼ同じ設定になります。基本的に、これら間の唯一の違いは、異なるホスト名や IP ポートを使用してエンドポイント URI を公開することです。ただし、負荷分散クラスター内の各サーバーに個別の OSGi バンドルを作成する代わりに、設定変数を使用してホストまたはポートを指定できるようにするテンプレートを定義することが推奨されます。
例47.3「ロードバランシングクラスターのサーバーテンプレート」 は、負荷分散クラスターでサーバーを定義するテンプレートアプローチを示しています。
例47.3 ロードバランシングクラスターのサーバーテンプレート
まず、OSGi Blueprint プロパティープレースホルダーを初期化する必要があります。プロパティープレースホルダーのメカニズムを使用すると、OSGi Config Admin サービスからプロパティー設定を読み取り、Blueprint 設定ファイルのプロパティーを置き換えることができます。この例では、プロパティープレースホルダーは
io.fabric8.examples.camel.loadbalancing.server
永続 ID からプロパティーにアクセスします。OSGi Config Admin サービスの永続 ID は、関連するプロパティー設定のコレクションを識別します。プロパティープレースホルダーの初期化後に、構文を使用して永続 ID から任意のプロパティー値( [[PropName]]
)にアクセスできます。
Fabric endpont URI はプロパティープレースホルダーのメカニズムを利用して、実行時に Jetty ポート
[[portNumber]]
の値を置き換えます。デプロイ時に、portName
プロパティーの値を指定できます。たとえば、カスタム機能を使用する場合は、機能定義で プロパティーを指定できます ( Add OSGi configurations to the featureを参照してください)。または、Fuse Management Console でデプロイメントプロファイルを定義するときに設定プロパティーを指定することもできます。
OSGi バンドルプラグインの設定 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Fabric エンドポイントを使用する OSGi バンドルを定義する場合は、以下の Java パッケージをインポートするように
Import-Package
バンドルヘッダーを設定する必要があります。
io.fabric8.zookeeper
io.fabric8.zookeeper
たとえば、Maven を使用してアプリケーションをビルドする場合、例47.4「Maven バンドルプラグインの設定」 は、必要なパッケージをインポートするように Maven バンドルプラグインを設定する方法を示しています。
例47.4 Maven バンドルプラグインの設定