Zookeeper 支持

Zookeeper 支持

4.2 版在 4.2 版中为框架添加了 Zookeeper 支持,其中包括:spring-doc.cadn.net.cn

您需要将此依赖项包含在您的项目中:spring-doc.cadn.net.cn

专家
<dependency>
    <groupId>org.springframework.integration</groupId>
    <artifactId>spring-integration-zookeeper</artifactId>
    <version>6.0.9</version>
</dependency>
Gradle
compile "org.springframework.integration:spring-integration-zookeeper:6.0.9"

Zookeeper 元数据存储

您可以使用ZookeeperMetadataStore其中任何MetadataStore,例如持久文件列表过滤器。 有关详细信息,请参阅元数据存储。 以下示例使用 XML 配置 Zookeeper 元数据存储:spring-doc.cadn.net.cn

<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 元数据存储:spring-doc.cadn.net.cn

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

Zookeeper 锁注册表

ZookeeperLockRegistry可以在任何LockRegistry,例如在集群环境中使用聚合器时,共享MessageStore.spring-doc.cadn.net.cn

一个LockRegistry用于根据密钥“查找”锁(聚合器使用correlationId). 默认情况下,锁定ZookeeperLockRegistry在 Zookeeper 中按照以下路径进行维护:/SpringIntegration-LockRegistry/. 您可以通过提供ZookeeperLockRegistry.KeyToPathStrategy,如以下示例所示:spring-doc.cadn.net.cn

public interface KeyToPathStrategy {

    String pathFor(String key);

    boolean bounded();

}

如果策略返回trueisBounded,不需要收获未使用的锁。 对于无界策略(例如默认策略),您需要定期调用expireUnusedOlderThan(long age)从内存中删除旧的未使用锁。spring-doc.cadn.net.cn

String 版本为 5.5.6,则ZookeeperLockRegistry是支持自动清理 ZkLock 中的缓存ZookeeperLockRegistry.locks通过ZookeeperLockRegistry.setCacheCapacity(). 有关更多信息,请参阅其 JavaDocs。spring-doc.cadn.net.cn

Zookeeper 领导活动处理

以下示例使用 XML 在 Zookeeper 中配置应用程序以选举领导者:spring-doc.cadn.net.cn

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

client是对CuratorFramework豆。 一个CuratorFrameworkFactoryBean可用。 当选出领导者时,一个OnGrantedEvent为角色发布cluster. 该角色中的任何终结点都已启动。 当领导权被撤销时,一个OnRevokedEvent为角色发布cluster. 该角色中的任何终结点都将停止。 有关详细信息,请参阅端点角色spring-doc.cadn.net.cn

您可以使用 Java 配置创建领导者Starters的实例,如以下示例所示:spring-doc.cadn.net.cn

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

从 5.3 版开始,一个candidate选项在LeaderInitiatorFactoryBean对外部提供的更多配置控制Candidate实例。 只有一个candidaterole必须提供选项,但不能同时提供两者;这roleoptions 在内部创建一个DefaultCandidate实例,并带有UUIDid选择。spring-doc.cadn.net.cn