如需使用最新稳定版本,请使用 Spring Integration 7.0.4spring-doc.cadn.net.cn

Zookeeper 支持

版本 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.4.10</version>
</dependency>
compile "org.springframework.integration:spring-integration-zookeeper:6.4.10"

Zookeeper 元数据存储

您可以在任何需要MetadataStore的地方使用ZookeeperMetadataStore,例如用于持久化文件列表过滤器。 有关更多信息,请参阅元数据存储。 以下示例使用 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();

}

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

从版本 5.5.6 开始,ZookeeperLockRegistry 可通过 ZookeeperLockRegistry.setCacheCapacity() 自动为 ZkLock 清理缓存(ZookeeperLockRegistry.locks)。 有关更多信息,请参阅其 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 bean 的引用。 有一个可用的 CuratorFrameworkFactoryBean。 当选领导者后,将发布一个针对角色 clusterOnGrantedEvent。 该角色中的任何端点都将启动。 当领导权被撤销时,将发布一个针对角色 clusterOnRevokedEvent。 该角色中的任何端点都将停止。 有关更多信息,请参阅 端点角色spring-doc.cadn.net.cn

您可以使用 Java 配置来创建 LeaderInitiator 的实例,如下例所示: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 选项中只需提供其中一个,但不能同时提供;role 选项会在内部创建一个 DefaultCandidate 实例,并附带一个用于 id 选项的 UUIDspring-doc.cadn.net.cn