版本 4.2 在 4.2 版中为框架添加了 Zookeeper 支持,其中包括:Spring中文文档

您需要将此依赖项包含在项目中:Spring中文文档

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

Zookeeper 元数据存储

您可以在需要的地方使用任何,例如用于持久性文件列表筛选器。 有关详细信息,请参阅元数据存储。 以下示例使用 XML 配置 Zookeeper 元数据存储:ZookeeperMetadataStoreMetadataStoreSpring中文文档

<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中文文档

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

Zookeeper 锁注册表

可以在需要任何的地方使用,例如在具有共享 .ZookeeperLockRegistryLockRegistryMessageStoreSpring中文文档

A 用于根据密钥“查找”锁(聚合器使用 )。 默认情况下,在 zookeeper 中的锁在以下路径下维护:. 您可以通过提供 的实现来自定义路径,如以下示例所示:LockRegistrycorrelationIdZookeeperLockRegistry/SpringIntegration-LockRegistry/ZookeeperLockRegistry.KeyToPathStrategySpring中文文档

public interface KeyToPathStrategy {

    String pathFor(String key);

    boolean bounded();

}

如果策略返回 ,则不需要收集未使用的锁。 对于无界策略(例如默认策略),您需要定期调用以从内存中删除旧的未使用锁。trueisBoundedexpireUnusedOlderThan(long age)Spring中文文档

从版本 5.5.6 开始,支持通过 . 有关更多信息,请参阅其 JavaDocs。ZookeeperLockRegistryZookeeperLockRegistry.locksZookeeperLockRegistry.setCacheCapacity()Spring中文文档

Zookeeper 领导事件处理

以下示例使用 XML 在 Zookeeper 中配置用于领导者选举的应用程序:Spring中文文档

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

client是对 Bean 的引用。 A 可用。 当选领导者时,将发布该角色的 an。 该角色中的任何终结点都将启动。 当领导权被撤销时,将发布该角色的 an。 该角色中的任何终结点都将停止。 有关详细信息,请参阅终结点角色CuratorFrameworkCuratorFrameworkFactoryBeanOnGrantedEventclusterOnRevokedEventclusterSpring中文文档

您可以使用 Java 配置创建 leader 发起程序的实例,如以下示例所示:Spring中文文档

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

从版本 5.3 开始,在外部提供的实例的更多配置控制上公开了一个选项。 只需提供其中一个 or 选项,但不能同时提供两个选项;这些选项在内部创建一个带有 for 选项的实例。candidateLeaderInitiatorFactoryBeanCandidatecandidateroleroleDefaultCandidateUUIDidSpring中文文档