Spring 集成 Zookeeper - 我目前是领导者吗

Spring Integration Zookeeper - Am I Currently leader

在多个 Tomcat 实例上部署了一个 Spring Integration 4.3.8 应用程序,并且该应用程序使用 org.springframework.integration:spring-integration-zookeeper:4.3.8.RELEASE 到 运行 集群中应用程序的多个实例一次只有一个人被选为领导者。

问题是,从应用程序中查询我当前是否是领导者的最简单方法是什么?我可以通过可用的 Curator/Zookeeper API 获取此信息吗?还是我需要创建某种事件侦听器?

希望您使用LeaderInitiator

当它被授予领导者角色时,会发出 OnGrantedEvent。 那甚至还有 Context 属性。反过来,那个有 isLeader() 状态。

您可以存储此对象以供将来使用,并在需要时检查 isLeader()

自版本 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;
}