动物园管理员支持
4.2 版本在 4.2 版本的框架中增加了Zookeeper支持,包括:
您需要将此依赖项包含到您的项目中:
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-zookeeper</artifactId>
<version>5.5.13</version>
</dependency>
compile "org.springframework.integration:spring-integration-zookeeper:5.5.13"
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
。
ALockRegistry
用于“查找”基于密钥的锁(聚合器使用correlationId
)。默认情况下,ZookeeperLockRegistry
zookeeper中的锁在以下路径下维护:/SpringIntegration-LockRegistry/
. 您可以通过提供 的实现来自定义路径ZookeeperLockRegistry.KeyToPathStrategy
,如以下示例所示:
public interface KeyToPathStrategy {
String pathFor(String key);
boolean bounded();
}
如果策略true
从中返回isBounded
,则不需要收获未使用的锁。对于无限策略(例如默认),您需要定期调用expireUnusedOlderThan(long age)
以从内存中删除旧的未使用锁。
5.5.6 版本的字符串,ZookeeperLockRegistry
支持自动清理缓存中的ZookeeperLockRegistry.locks
ZkLock ZookeeperLockRegistry.setCacheCapacity()
。有关更多信息,请参阅其 JavaDocs。
Zookeeper 领导力事件处理
以下示例使用 XML 在 Zookeeper 中配置领导选举的应用程序:
<int-zk:leader-listener client="client" path="/siNamespace" role="cluster" />
client
是对CuratorFramework
bean 的引用。ACuratorFrameworkFactoryBean
可用。当一个领导者被选举出来时,OnGrantedEvent
就会为这个角色发布一个cluster
。该角色中的任何端点都将启动。撤销领导权时,OnRevokedEvent
会发布该角色的 an cluster
。该角色中的任何端点都将停止。有关详细信息,请参阅端点角色。
您可以使用 Java 配置来创建领导者发起者的实例,如以下示例所示:
@Bean
public LeaderInitiatorFactoryBean leaderInitiator(CuratorFramework client) {
return new LeaderInitiatorFactoryBean()
.setClient(client)
.setPath("/siTest/")
.setRole("cluster");
}
从 5.3 版开始,在candidate
上公开了一个选项,LeaderInitiatorFactoryBean
用于对外部提供的Candidate
实例进行更多配置控制。只需提供candidate
或role
选项之一,但不能同时提供;选项在role
内部创建一个DefaultCandidate
带有UUID
forid
选项的实例。