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.第103章 マスターコンポーネント
概要
マスターコンポーネントは、クラスターの単一のコンシューマーのみが指定のエンドポイントから消費されるようにする方法を提供します。その JVM が停止した場合に自動フェイルオーバーを使用します。この機能は、同時消費をサポートしていないレガシーバックエンドから消費する必要がある場合や、商用または安定性の理由から、いつでもバックエンドへの接続を 1 つだけ持つことができる場合に役立ちます。
Dependencies リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
マスターコンポーネントは、ファブリックが有効な Red Hat JBoss Fuse コンテナーのコンテキストでのみ使用できます。
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
URI 形式 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
マスターエンドポイントは、コンシューマーエンドポイント としてのみ使用できます。以下の URI 形式があります。
master:ClusterID:EndpointURI[?Options]
master:ClusterID:EndpointURI[?Options]
URI
EndpointURI
がファブリックレジストリーに公開され、ClusterId
クラスターに関連付けられます。
URI オプション リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
マスターコンポーネント自体は URI オプションをサポートし ません。そのため、URI のオプションは指定されたコンシューマーエンドポイント
EndpointURI
に適用されます。
マスターコンポーネントの使用方法 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
マスターコンポーネントは、エンドポイントからメッセージをポーリングする必要がある場合に便利ですが、そのエンドポイントへの 1 つのコネクション のみが可能です。この場合、マスターコンポーネントを使用して、コンシューマーエンドポイントのフェイルオーバークラスターを定義できます。クラスターの各マスターエンドポイントは指定のエンドポイントからメッセージを消費できますが、マスターエンドポイントの 1 つ だけがアクティブになりますが、他のマスターエンドポイントは待機しています(スレーブ)。
たとえば、
seda:bar
エンドポイントから消費できる Master エンドポイントのクラスターを設定するには、以下の手順を実行します。
- 以下の URI でマスターエンドポイントを定義します(クラスター内の各エンドポイントは まったく 同じ URI を使用します)。
master:mysedalock:seda:bar
master:mysedalock:seda:bar
Copy to Clipboard Copied! Toggle word wrap Toggle overflow クラスター内の各マスターエンドポイントは、mysedalock
ロックを取得しようとします(Zookeeper レジストリーのキーとして実装されます)。ロックの取得に成功するマスターエンドポイントはアクティブ(マスター)になり、seda:bar
エンドポイントからメッセージの使用を開始します。他の Master エンドポイントは待機状態に入り、ロック(スレーブ)の試行を続行します。 - マスターエンドポイントをデプロイするプロファイルには、
fabric-camel
機能を含めるようにしてください。 - Blueprint XML では、以下のように Camel ルートの開始時に Master エンドポイントを定義できます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
JMS ActiveMQ ブローカーをポーリングするマスター/スレーブクラスターの例 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
たとえば、マスターコンポーネントを使用する一般的な方法は、JMS キューからメッセージを消費するための排他的コンシューマーのクラスターを作成することです。マスターエンドポイントの 1 つのみがキューからいつでも消費され、そのマスターエンドポイントがダウンした場合、他のマスターエンドポイントの 1 つが引き継ぎます(新規マスターになります)。この例では、2 つの Camel ルートのクラスターを作成します。ここでは、各ルートは、指定されたキュー
FABRIC.DEMO
から消費できる Master エンドポイントで始まります。
ActiveMQ ブローカーからメッセージをポーリングするクラスターを作成する手順 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
マスターコンポーネントに基づいて ActiveMQ ブローカーからメッセージをポーリングするマスター/スレーブクラスターを作成するには、以下の手順を実行します。
- ファブリックがない場合は、以下のコンソールコマンドを入力して作成します。
JBossFuse:karaf@root> fabric:create --new-user AdminUser --new-user-password AdminPass --zookeeper-password ZooPass --wait-for-provisioning
JBossFuse:karaf@root> fabric:create --new-user AdminUser --new-user-password AdminPass --zookeeper-password ZooPass --wait-for-provisioning
Copy to Clipboard Copied! Toggle word wrap Toggle overflow --new-user
および--new-user-password
オプションは、新しい管理者ユーザーの認証情報を指定します。Zookeeper パスワードは、Fabric レジストリーサービス(/fabric
下のすべてのノード)の機密データを保護するために使用されます。注記ローカルマシンで VPN (仮想プライベートネットワーク)を使用する場合は、ローカルコンテナーの使用中にファブリックを作成し、ログオフしたままに VPN をログに記録することが推奨されます。ローカル Fabric Server は、固定 IP アドレスまたはホスト名に永続的に関連付けられます。ファブリックの作成時に VPN が有効になっている場合、基礎となる Java ランタイムは、永続的なローカルホスト名ではなく VPN ホスト名を検出して使用することができます。これは、マルチホームマシンでも問題になる可能性があります。ホスト名について絶対的に確認するには、IP アドレスを明示的に指定できます。Fabric Guide の Creating a New Fabric の章を参照 してください。 - この例では、Apache ActiveMQ ブローカーの実行中のインスタンスにアクセスでき、ブローカーの OpenWire コネクターの TCP ポートを知っている必要があります。たとえば、以下のいずれかの方法で ActiveMQ ブローカーにアクセスできます。
- JBoss Fuse のクリーンインストールでファブリックを作成したばかりです(コールド再起動後)。この場合、
root
コンテナーはデフォルトでjboss-fuse-full
プロファイルを含める必要があります。以下のようにfabric:container-list
コンソールコマンドを入力して、このケースを確認できます。JBossFuse:karaf@root> fabric:container-list [id] [version] [connected] [profiles] [provision status] root* 1.0 true fabric, fabric-ensemble-0000-1, jboss-fuse-full success
JBossFuse:karaf@root> fabric:container-list [id] [version] [connected] [profiles] [provision status] root* 1.0 true fabric, fabric-ensemble-0000-1, jboss-fuse-full success
Copy to Clipboard Copied! Toggle word wrap Toggle overflow デフォルトでは、jboss-fuse-full
プロファイルはポート61616
でリッスンする ActiveMQ ブローカーをインスタンス化します。現在の例ではこのブローカーを使用できます。 - ルートコンテナー(またはその他のコンテナー)で実行されているブローカーがない場合、コンソールプロンプトで以下の fabric コマンドを入力して、ブローカーを新しいファブリック子コンテナー
broker1
にすばやくインストールできます。JBossFuse:karaf@root> fabric:container-create-child --profile mq-default root broker1
JBossFuse:karaf@root> fabric:container-create-child --profile mq-default root broker1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この場合、ブラウザーベースの Fuse 管理コンソールを使用して、ブローカーの OpenWire コネクターの TCP ポートを検出できます。
- Master コンポーネントを使用する単純な Apache Camel ルートをデプロイするために使用される
master-example
プロファイルを作成します。以下のコンソールコマンドを実行してプロファイルを作成します。JBossFuse:karaf@root> fabric:profile-create --parents default master-example
JBossFuse:karaf@root> fabric:profile-create --parents default master-example
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 必要な Karaf 機能を
master-example
プロファイルに追加します。以下のコンソールコマンドを入力します。fabric:profile-edit --features fabric-camel master-example fabric:profile-edit --features activemq-camel master-example
fabric:profile-edit --features fabric-camel master-example fabric:profile-edit --features activemq-camel master-example
Copy to Clipboard Copied! Toggle word wrap Toggle overflow master-example
プロファイルで、簡単な Camel ルートをリソースとして定義します。ビルトインテキストエディターを呼び出して、以下のようにcamel.xml
の新しいリソースを作成します。fabric:profile-edit --resource camel.xml master-example
fabric:profile-edit --resource camel.xml master-example
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の内容を組み込みテキストエディターにコピーして貼り付けます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow OpenWirePort をブローカーの OpenWire コネクターのポート番号に置き換え、UserName および Password をコンテナー上の有効な JAAS クレデンシャルに置き換えることで、ルート設定をカスタマイズするようにしてください(たとえば、これらの手順の 手順 1 で作成した AdminUser および AdminPass クレデンシャルを置き換えることができます)。テキストエディターを保存して終了するには、Ctrl-S, Ctrl-X と入力します。camel.xml
リソースを OSGi バンドルとしてデプロイするようにmaster-example
プロファイルを設定します。以下のコンソールコマンドを入力し、master-example
エージェントプロパティーに新しいエントリーを作成します。fabric:profile-edit --bundles blueprint:profile:camel.xml master-example
fabric:profile-edit --bundles blueprint:profile:camel.xml master-example
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記blueprint:
接頭辞は Fabric に対して、指定されたリソースを Blueprint XML ファイルとしてデプロイするように指示します。profile:
接頭辞は Fabric に対して、リソース(現在のプロファイルの現在のバージョン)の場所を指示します。master-example
プロファイルをクラスターとしてデプロイできるように、新しい子コンテナー 2 つを作成します(1 つのマスターとスレーブ 1 つ)。以下のコンソールコマンドを入力します。fabric:container-create-child root child 2
fabric:container-create-child root child 2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 以下のように、
master-example
プロファイルとmq-client
プロファイルの両方を各子コンテナーにデプロイします。fabric:container-change-profile child1 master-example mq-client fabric:container-change-profile child2 master-example mq-client
fabric:container-change-profile child1 master-example mq-client fabric:container-change-profile child2 master-example mq-client
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - メッセージをブローカーの
FABRIC.DEMO
キューに送信すると、メッセージはデプロイされたマスターエンドポイントの 1 つ(および 1 つだけ)によって消費されます。たとえば、ブラウザーベースの Fuse Management コンソールを使用して、メッセージをブローカーに簡単に作成および送信できます。 - 現在のマスターをホストするコンテナーを停止する場合(最初に
child1
コンテナー)、スレーブは新規マスター(child2
コンテナー内)に昇格され、FABRIC.DEMO
キューからのメッセージの消費を開始します。たとえば、child2
に現在のマスターが含まれていると仮定すると、以下のコンソールコマンドを入力して停止できます。fabric:container-stop child2
fabric:container-stop child2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
OSGi バンドルプラグインの設定 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
マスターエンドポイントを使用する OSGi バンドルを定義する場合は、以下の Java パッケージをインポートするように
Import-Package
バンドルヘッダーを設定する必要があります。
io.fabric8.zookeeper
io.fabric8.zookeeper
たとえば、Maven を使用してアプリケーションをビルドする場合、例103.1「Maven バンドルプラグインの設定」 は、必要なパッケージをインポートするように Maven バンドルプラグインを設定する方法を示しています。
例103.1 Maven バンドルプラグインの設定