Java Spring集成Zookeeper-我现在是领导者吗
在多个Tomcat实例上部署一个Spring Integration 4.3.8应用程序,该应用程序使用Java Spring集成Zookeeper-我现在是领导者吗,java,spring-integration,apache-zookeeper,apache-curator,Java,Spring Integration,Apache Zookeeper,Apache Curator,在多个Tomcat实例上部署一个Spring Integration 4.3.8应用程序,该应用程序使用org.springframework.Integration:Spring Integration zookeeper:4.3.8.RELEASE在一个集群中运行该应用程序的多个实例,其中每次只有一个实例被选为领导者 问题是,从应用程序中查询我目前是否是领导者的最简单方法是什么?我可以通过可用的馆长/动物园管理员API获取此信息吗?或者我需要创建某种类型的事件侦听器吗?我希望您使用Leade
org.springframework.Integration:Spring Integration zookeeper:4.3.8.RELEASE
在一个集群中运行该应用程序的多个实例,其中每次只有一个实例被选为领导者
问题是,从应用程序中查询我目前是否是领导者的最简单方法是什么?我可以通过可用的馆长/动物园管理员API获取此信息吗?或者我需要创建某种类型的事件侦听器吗?我希望您使用
LeaderInitiator
当被授予领导者角色时,将发出一个OnGrantedEvent
。
它甚至具有上下文
属性。而这一个,反过来,具有isLeader()
状态
您可以存储此对象以备将来使用,并在需要时随时检查isisLeader()
由于版本5.0
LeaderInitiator
提供了对上下文的直接访问:
/**
* The context of the initiator or null if not running.
* @return the context (or null if not running)
* @since 5.0
*/
public Context getContext() {
if (this.leaderSelector == null) {
return NULL_CONTEXT;
}
return this.context;
}
您还可以在其中一个端点上调用
isRunning()
;只有当您是领导者时才应该是真的。@GaryRussell,我们的端点已被覆盖,因为我们有一些业务案例,我们希望某些端点即使在部署成为领导者时也不启动。事实上,这就是为什么我们正在寻找一种知道我们是否是领导者的方法,以便只有在hasLeadership=true
时,我们才能在重写的端点上调用super.start()
。因此,在本例中,为什么在端点上查询isRunning()
对我们不起作用!我不知道我的答案是否适合您的用例。@Artem,5.0版在哪里可用?我们目前使用的是Maven的最新版本4.3.8。5.0版是否在某个快照存储库中?访问CuratorContext
并在其上调用isLeader()
,应该可以做到这一点。最新的是M3
:。但正如我所说的:您处理OnGranted/onreversed
事件以获得上下文
,以备将来使用。如果没有事件,则没有上下文,因此,您不是领导者。在5.0
GA之前,这就像是一个变通办法,如果那样的话。我们可以考虑回溯一下<代码> GETCONSETURNER()/<代码>,但是…如果你真的无法想出解决方案,请免费筹集适当的JIRA: