美文网首页Java 杂谈程序员
elastic job源码分析 - 主节点选举监听器

elastic job源码分析 - 主节点选举监听器

作者: 耶也夜 | 来源:发表于2018-09-03 19:52 被阅读36次

    主节点选举监听器主要负责监听处理与主节点相关事件。包括:主节点选举和主节点下线。在elastic job中,实现类为:
    io.elasticjob.lite.internal.election.ElectionListenerManager,该类提供的start方法负责启动这两个监听器。

    public void start() {
        addDataListener(new LeaderElectionJobListener());
        addDataListener(new LeaderAbdicationJobListener());
    }
    

    主节点选举

    主节点选举的目的是产生任务的主节点。在elastic job中,任务的执行可以分布在不同的实例(节点)中,但任务分片等核心控制,需要由主节点完成。因此,任务执行前,需要选举出主节点。

    一般情况下,以下两个场景会触发主节点的选举:

    1. 第一个服务上线(当前不存在主节点,当前服务未禁用);
    2. 主节点下线(删除主节点leader/election/instance).

    elastic job实现逻辑在io.elasticjob.lite.internal.election.ElectionListenerManager.LeaderElectionJobListener#dataChanged中。

    protected void dataChanged(final String path, final Type eventType, final String data) {
        if (!JobRegistry.getInstance().isShutdown(jobName) && (isActiveElection(path, data) || isPassiveElection(path, eventType))) {
            leaderService.electLeader();
        }
    }
    

    JobRegistry.getInstance().isShutdown(jobName)用于判断当前任务没有关闭;
    isActiveElection(path, data)用于当前场景满足:第一次服务上线;
    isPassiveElection(path, eventType)用于确定当前场景满足:主节点下线。

    当以上条件满足时,触发主节点选举代码leaderService.electLeader(),该代码逻辑执行主节点选举,选举成功后,在zk中创建节点leader/election/instance,该节点的值为任务实例ID(IP@-@PID),表示当前时刻,主节点为值对于的实例。

    主节点下线

    任务执行中,主节点已被选举出来。当把主节点所在主机(server)在zk中禁用时(节点`servers/ip'的值设置为DISABLED),会触发主节点下线事件,此时监听器会删除当前主节点。此时会触发主节点选举,然后重新选举出新的主节点。

    相关文章

      网友评论

        本文标题:elastic job源码分析 - 主节点选举监听器

        本文链接:https://www.haomeiwen.com/subject/kpbiwftx.html