Zookeeper 支持
版本 4.2 在版本 4.2 中向框架添加了 Zookeeper 支持,其中包括:
您需要将此依赖项包含在您的项目中:
- 
Maven 
- 
Gradle 
<dependency>
    <groupId>org.springframework.integration</groupId>
    <artifactId>spring-integration-zookeeper</artifactId>
    <version>6.4.0</version>
</dependency>compile "org.springframework.integration:spring-integration-zookeeper:6.4.0"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 Lock 注册表
这ZookeeperLockRegistry可以在任何LockRegistry是必需的,例如,在具有共享MessageStore.
一个LockRegistry用于根据键“查找”锁(聚合器使用correlationId).
默认情况下,锁定ZookeeperLockRegistry在 zookeeper 中的以下路径下进行维护:/SpringIntegration-LockRegistry/.
您可以通过提供ZookeeperLockRegistry.KeyToPathStrategy,如下例所示:
public interface KeyToPathStrategy {
    String pathFor(String key);
    boolean bounded();
}如果策略返回true从isBounded,则不需要收集未使用的锁。
对于无界策略(例如默认策略),您需要定期调用expireUnusedOlderThan(long age)从内存中删除旧的未使用的锁。
从版本 5.5.6 开始,ZookeeperLockRegistry是支持自动清理 ZkLock 的缓存ZookeeperLockRegistry.locks通过ZookeeperLockRegistry.setCacheCapacity().
有关更多信息,请参阅其 JavaDocs。
Zookeeper 领导层事件处理
以下示例使用 XML 在 Zookeeper 中配置用于领导选举的应用程序:
<int-zk:leader-listener client="client" path="/siNamespace" role="cluster" />client是对CuratorFramework豆。
一个CuratorFrameworkFactoryBean可用。
当选出领导者时,OnGrantedEvent为角色发布cluster.
该角色中的任何终端节点都将启动。
撤销领导权时,OnRevokedEvent为角色发布cluster.
该角色中的任何终端节点都将停止。
有关更多信息,请参阅终端节点角色。
您可以使用 Java 配置创建领导发起方的实例,如下例所示:
@Bean
public LeaderInitiatorFactoryBean leaderInitiator(CuratorFramework client) {
    return new LeaderInitiatorFactoryBean()
                .setClient(client)
                .setPath("/siTest/")
                .setRole("cluster");
}从版本 5.3 开始,candidate选项在LeaderInitiatorFactoryBean对于外部提供的Candidate实例。
只有一个candidate或role必须提供选项,但不能同时提供两者;这roleoptions 在内部创建一个DefaultCandidate实例中具有UUID为id选择。