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

主节点选举监听器主要负责监听处理与主节点相关事件。包括:主节点选举和主节点下线。在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源码分析 - 主节点选举监听器)