Zookeeper サポート
バージョン 4.2 は、バージョン 4.2 のフレームワークに Zookeeper [Apache] (英語) サポートを追加しました。
この依存関係をプロジェクトに含める必要があります。
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
インスタンスを作成します。