Zookeeper 支持
Zookeeper 支持
4.2 版在 4.2 版中为框架添加了 Zookeeper 支持,其中包括:
您需要将此依赖项包含在您的项目中:
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-zookeeper</artifactId>
<version>6.0.9</version>
</dependency>
compile "org.springframework.integration:spring-integration-zookeeper:6.0.9"
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 锁注册表
这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)
从内存中删除旧的未使用锁。
String 版本为 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 配置创建领导者Starters的实例,如以下示例所示:
@Bean
public LeaderInitiatorFactoryBean leaderInitiator(CuratorFramework client) {
return new LeaderInitiatorFactoryBean()
.setClient(client)
.setPath("/siTest/")
.setRole("cluster");
}
从 5.3 版开始,一个candidate
选项在LeaderInitiatorFactoryBean
对外部提供的更多配置控制Candidate
实例。
只有一个candidate
或role
必须提供选项,但不能同时提供两者;这role
options 在内部创建一个DefaultCandidate
实例,并带有UUID
为id
选择。