第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
Copy to Clipboard Toggle word wrap

URI 形式

マスターエンドポイントは、コンシューマーエンドポイント としてのみ使用できます。以下の URI 形式があります。
master:ClusterID:EndpointURI[?Options]
Copy to Clipboard Toggle word wrap
URI EndpointURI がファブリックレジストリーに公開され、ClusterId クラスターに関連付けられます。

URI オプション

マスターコンポーネント自体は URI オプションをサポートし ません。そのため、URI のオプションは指定されたコンシューマーエンドポイント EndpointURI に適用されます。

マスターコンポーネントの使用方法

マスターコンポーネントは、エンドポイントからメッセージをポーリングする必要がある場合に便利ですが、そのエンドポイントへの 1 つのコネクション のみが可能です。この場合、マスターコンポーネントを使用して、コンシューマーエンドポイントのフェイルオーバークラスターを定義できます。クラスターの各マスターエンドポイントは指定のエンドポイントからメッセージを消費できますが、マスターエンドポイントの 1 つ だけがアクティブになりますが、他のマスターエンドポイントは待機しています(スレーブ)。
たとえば、seda:bar エンドポイントから消費できる Master エンドポイントのクラスターを設定するには、以下の手順を実行します。
  1. 以下の URI でマスターエンドポイントを定義します(クラスター内の各エンドポイントは まったく 同じ URI を使用します)。
    master:mysedalock:seda:bar
    Copy to Clipboard Toggle word wrap
    クラスター内の各マスターエンドポイントは、mysedalock ロックを取得しようとします(Zookeeper レジストリーのキーとして実装されます)。ロックの取得に成功するマスターエンドポイントはアクティブ(マスター)になり、seda:bar エンドポイントからメッセージの使用を開始します。他の Master エンドポイントは待機状態に入り、ロック(スレーブ)の試行を続行します。
  2. マスターエンドポイントをデプロイするプロファイルには、fabric-camel 機能を含めるようにしてください。
  3. Blueprint XML では、以下のように Camel ルートの開始時に Master エンドポイントを定義できます。
    <?xml version="1.0" encoding="UTF-8"?>
    <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        ...
        <camelContext id="camel" xmlns="http://camel.apache.org/schema/blueprint">
            <route>
                <from uri="master:mysedalock:seda:bar"/>
                ...
            </route>
        </camelContext>
        ...
    </blueprint>
    Copy to Clipboard Toggle word wrap

JMS ActiveMQ ブローカーをポーリングするマスター/スレーブクラスターの例

たとえば、マスターコンポーネントを使用する一般的な方法は、JMS キューからメッセージを消費するための排他的コンシューマーのクラスターを作成することです。マスターエンドポイントの 1 つのみがキューからいつでも消費され、そのマスターエンドポイントがダウンした場合、他のマスターエンドポイントの 1 つが引き継ぎます(新規マスターになります)。この例では、2 つの Camel ルートのクラスターを作成します。ここでは、各ルートは、指定されたキュー FABRIC.DEMO から消費できる Master エンドポイントで始まります。

ActiveMQ ブローカーからメッセージをポーリングするクラスターを作成する手順

マスターコンポーネントに基づいて ActiveMQ ブローカーからメッセージをポーリングするマスター/スレーブクラスターを作成するには、以下の手順を実行します。
  1. ファブリックがない場合は、以下のコンソールコマンドを入力して作成します。
    JBossFuse:karaf@root> fabric:create --new-user AdminUser --new-user-password AdminPass
      --zookeeper-password ZooPass --wait-for-provisioning
    Copy to Clipboard Toggle word wrap
    --new-user および --new-user-password オプションは、新しい管理者ユーザーの認証情報を指定します。Zookeeper パスワードは、Fabric レジストリーサービス( /fabric下のすべてのノード)の機密データを保護するために使用されます。
    注記
    ローカルマシンで VPN (仮想プライベートネットワーク)を使用する場合は、ローカルコンテナーの使用中にファブリックを作成し、ログオフしたままに VPN をログに記録することが推奨されます。ローカル Fabric Server は、固定 IP アドレスまたはホスト名に永続的に関連付けられます。ファブリックの作成時に VPN が有効になっている場合、基礎となる Java ランタイムは、永続的なローカルホスト名ではなく VPN ホスト名を検出して使用することができます。これは、マルチホームマシンでも問題になる可能性があります。ホスト名について絶対的に確認するには、IP アドレスを明示的に指定できます。Fabric Guide の Creating a New Fabric の章を参照 してください。
  2. この例では、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
      Copy to Clipboard Toggle word wrap
      デフォルトでは、jboss-fuse-full プロファイルはポート 61616 でリッスンする ActiveMQ ブローカーをインスタンス化します。現在の例ではこのブローカーを使用できます。
    • ルートコンテナー(またはその他のコンテナー)で実行されているブローカーがない場合、コンソールプロンプトで以下の fabric コマンドを入力して、ブローカーを新しいファブリック子コンテナー broker1 にすばやくインストールできます。
      JBossFuse:karaf@root> fabric:container-create-child --profile mq-default root broker1
      Copy to Clipboard Toggle word wrap
      この場合、ブラウザーベースの Fuse 管理コンソールを使用して、ブローカーの OpenWire コネクターの TCP ポートを検出できます。
  3. Master コンポーネントを使用する単純な Apache Camel ルートをデプロイするために使用される master-example プロファイルを作成します。以下のコンソールコマンドを実行してプロファイルを作成します。
    JBossFuse:karaf@root> fabric:profile-create --parents default master-example
    Copy to Clipboard Toggle word wrap
  4. 必要な Karaf 機能を master-example プロファイルに追加します。以下のコンソールコマンドを入力します。
    fabric:profile-edit --features fabric-camel master-example
    fabric:profile-edit --features activemq-camel master-example
    Copy to Clipboard Toggle word wrap
  5. master-example プロファイルで、簡単な Camel ルートをリソースとして定義します。ビルトインテキストエディターを呼び出して、以下のように camel.xml の新しいリソースを作成します。
    fabric:profile-edit --resource camel.xml master-example
    Copy to Clipboard Toggle word wrap
    以下の内容を組み込みテキストエディターにコピーして貼り付けます。
    <?xml version="1.0" encoding="UTF-8"?>
    <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    
        <camelContext id="camel" xmlns="http://camel.apache.org/schema/blueprint">
            <route id="fabric-server">
                <from uri="master:lockhandle:activemq:queue:FABRIC.DEMO"/>
                <log message="Message received : ${body}"/>
            </route>
        </camelContext>
    
        <bean id="activemq"
              class="org.apache.activemq.camel.component.ActiveMQComponent">
            <property name="brokerURL" value="tcp://localhost:OpenWirePort"/>
            <property name="userName" value="UserName"/>
            <property name="password" value="Password"/>
        </bean>
    
    </blueprint>
    Copy to Clipboard Toggle word wrap
    OpenWirePort をブローカーの OpenWire コネクターのポート番号に置き換え、UserName および Password をコンテナー上の有効な JAAS クレデンシャルに置き換えることで、ルート設定をカスタマイズするようにしてください(たとえば、これらの手順の 手順 1 で作成した AdminUser および AdminPass クレデンシャルを置き換えることができます)。
    テキストエディターを保存して終了するには、Ctrl-S, Ctrl-X と入力します。
  6. camel.xml リソースを OSGi バンドルとしてデプロイするように master-example プロファイルを設定します。以下のコンソールコマンドを入力し、master-example エージェントプロパティーに新しいエントリーを作成します。
    fabric:profile-edit --bundles blueprint:profile:camel.xml master-example
    Copy to Clipboard Toggle word wrap
    注記
    blueprint: 接頭辞は Fabric に対して、指定されたリソースを Blueprint XML ファイルとしてデプロイするように指示します。profile: 接頭辞は Fabric に対して、リソース(現在のプロファイルの現在のバージョン)の場所を指示します。
  7. master-example プロファイルをクラスターとしてデプロイできるように、新しい子コンテナー 2 つを作成します(1 つのマスターとスレーブ 1 つ)。以下のコンソールコマンドを入力します。
    fabric:container-create-child root child 2
    Copy to Clipboard Toggle word wrap
  8. 以下のように、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 Toggle word wrap
  9. メッセージをブローカーの FABRIC.DEMO キューに送信すると、メッセージはデプロイされたマスターエンドポイントの 1 つ(および 1 つだけ)によって消費されます。たとえば、ブラウザーベースの Fuse Management コンソールを使用して、メッセージをブローカーに簡単に作成および送信できます。
  10. 現在のマスターをホストするコンテナーを停止する場合(最初に child1 コンテナー)、スレーブは新規マスター( child2 コンテナー内)に昇格され、FABRIC.DEMO キューからのメッセージの消費を開始します。たとえば、child2 に現在のマスターが含まれていると仮定すると、以下のコンソールコマンドを入力して停止できます。
    fabric:container-stop child2
    Copy to Clipboard Toggle word wrap

OSGi バンドルプラグインの設定

マスターエンドポイントを使用する OSGi バンドルを定義する場合は、以下の Java パッケージをインポートするように Import-Package バンドルヘッダーを設定する必要があります。
io.fabric8.zookeeper
Copy to Clipboard Toggle word wrap
たとえば、Maven を使用してアプリケーションをビルドする場合、例103.1「Maven バンドルプラグインの設定」 は、必要なパッケージをインポートするように Maven バンドルプラグインを設定する方法を示しています。

例103.1 Maven バンドルプラグインの設定

<project ... >
  ...
  <build>
    <defaultGoal>install</defaultGoal>
    <plugins>
      ...
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <extensions>true</extensions>
        <configuration>
          <instructions>
            <Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName>
            <Import-Package>
              io.fabric8.zookeeper,
              *
            </Import-Package>
          </instructions>
        </configuration>
      </plugin>
    </plugins>
  </build>
  ...
</project>
Copy to Clipboard Toggle word wrap
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2025 Red Hat