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 元数据存储
您可以在需要 any 的地方使用 ,例如用于持久性文件列表过滤器。
有关更多信息,请参阅 元数据存储 。
以下示例使用 XML 配置 Zookeeper 元数据存储:ZookeeperMetadataStore
MetadataStore
<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
A 用于根据键“查找”锁(聚合器使用 )。
默认情况下,中的 锁在 zookeeper 中的以下路径下维护:。
您可以通过提供 的实现来自定义路径,如下例所示:LockRegistry
correlationId
ZookeeperLockRegistry
/SpringIntegration-LockRegistry/
ZookeeperLockRegistry.KeyToPathStrategy
public interface KeyToPathStrategy {
String pathFor(String key);
boolean bounded();
}
如果策略从 返回,则不需要收集未使用的锁。
对于无界策略(例如默认策略),您需要定期调用以从内存中删除旧的未使用的锁。true
isBounded
expireUnusedOlderThan(long age)
从版本 5.5.6 开始,支持通过 .
有关更多信息,请参阅其 JavaDocs。ZookeeperLockRegistry
ZookeeperLockRegistry.locks
ZookeeperLockRegistry.setCacheCapacity()
Zookeeper 领导层事件处理
以下示例使用 XML 在 Zookeeper 中配置用于领导选举的应用程序:
<int-zk:leader-listener client="client" path="/siNamespace" role="cluster" />
client
是对 Bean 的引用。
A 可用。
当选领导者时,将发布该角色的 an 。
该角色中的任何终端节点都将启动。
撤销领导权时,将发布角色的 an 。
该角色中的任何终端节点都将停止。
有关更多信息,请参阅终端节点角色。CuratorFramework
CuratorFrameworkFactoryBean
OnGrantedEvent
cluster
OnRevokedEvent
cluster
您可以使用 Java 配置创建领导发起方的实例,如下例所示:
@Bean
public LeaderInitiatorFactoryBean leaderInitiator(CuratorFramework client) {
return new LeaderInitiatorFactoryBean()
.setClient(client)
.setPath("/siTest/")
.setRole("cluster");
}
从版本 5.3 开始,在 for more configuration control 上公开了一个选项,控制外部提供的实例。
只需提供其中一个 or 选项,但不能同时提供两个选项;options 在内部创建一个带有 for 选项的实例。candidate
LeaderInitiatorFactoryBean
Candidate
candidate
role
role
DefaultCandidate
UUID
id