Zookeeper サポート

バージョン 4.2 は、バージョン 4.2 のフレームワークに Zookeeper [Apache] (英語) サポートを追加しました。

この依存関係をプロジェクトに含める必要があります。

Maven
<dependency>
    <groupId>org.springframework.integration</groupId>
    <artifactId>spring-integration-zookeeper</artifactId>
    <version>5.5.8</version>
</dependency>
Gradle
compile "org.springframework.integration:spring-integration-zookeeper:5.5.8"

Zookeeper メタデータストア

ZookeeperMetadataStore は、永続的なファイルリストフィルターなど、MetadataStore が必要な場合に使用できます。詳細については、"メタデータストア" を参照してください。次の例では、XML を使用して Zookeeper メタデータストアを構成します。

<bean id="client" class="org.springframework.integration.zookeeper.config.CuratorFrameworkFactoryBean">
    <constructor-arg value="${connect.string}" />
</bean>

<bean id="meta" class="org.springframework.integration.zookeeper.metadata.ZookeeperMetadataStore">
    <constructor-arg ref="client" />
</bean>

次の例は、Java を使用して Zookeeper メタデータストアを構成する方法を示しています。

@Bean
public MetadataStore zkStore(CuratorFramework client) {
    return new ZookeeperMetadataStore(client);
}

Zookeeper ロックレジストリ

ZookeeperLockRegistry は、共有 MessageStore を持つクラスター環境でアグリゲーターを使用する場合など、LockRegistry が必要な場所で使用できます。

LockRegistry は、キーに基づいてロックを「ルックアップ」するために使用されます(アグリゲーターは correlationId を使用します)。デフォルトでは、ZookeeperLockRegistry のロックは、zookeeper の次のパスで維持されます: /SpringIntegration-LockRegistry/。次の例に示すように、ZookeeperLockRegistry.KeyToPathStrategy の実装を提供することにより、パスをカスタマイズできます。

public interface KeyToPathStrategy {

    String pathFor(String key);

    boolean bounded();

}

ストラテジーが isBounded から true を返す場合、未使用のロックを取得する必要はありません。制限のない戦略(デフォルトなど)の場合、expireUnusedOlderThan(long age) を定期的に呼び出して、メモリから古い未使用のロックを削除する必要があります。

バージョン 5.5.6 の文字列である ZookeeperLockRegistry は、ZookeeperLockRegistry.setCacheCapacity() を介して ZookeeperLockRegistry.locks 内の ZkLock のキャッシュを自動的にクリーンアップすることをサポートしています。詳細については、JavaDocs を参照してください。

Zookeeper リーダーシップイベントの取り扱い

次の例では、XML を使用して、Zookeeper でのリーダー選出用のアプリケーションを構成します。

<int-zk:leader-listener client="client" path="/siNamespace" role="cluster" />

client は、CuratorFramework Bean への参照です。CuratorFrameworkFactoryBean が利用可能です。リーダーが選出されると、ロール cluster の OnGrantedEvent が公開されます。そのロールのエンドポイントが開始されます。リーダーシップが取り消されると、ロール cluster の OnRevokedEvent が公開されます。そのロールのエンドポイントはすべて停止します。詳細については、エンドポイントのロールを参照してください。

次の例に示すように、Java 構成を使用してリーダーイニシエーターのインスタンスを作成できます。

@Bean
public LeaderInitiatorFactoryBean leaderInitiator(CuratorFramework client) {
    return new LeaderInitiatorFactoryBean()
                .setClient(client)
                .setPath("/siTest/")
                .setRole("cluster");
}

バージョン 5.3 以降、外部で提供される Candidate インスタンスの構成制御を強化するために、candidate オプションが LeaderInitiatorFactoryBean で公開されています。candidate または role オプションのいずれか 1 つのみを指定する必要がありますが、両方を指定する必要はありません。role オプションは、id オプションの UUID を使用して内部的に DefaultCandidate インスタンスを作成します。