继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

elastic job原理解析-SchedulerFacade

crazier_huang
关注TA
已关注
手记 3
粉丝 0
获赞 0

elastic job原理解析-SchedulerFacade(一)

elastic job原理解析-Scheduler中描述elastic job的相关quartz的操作,但是并没有牵扯到对于job的管理,如分片,主节点选举等。分片,job的状态的持久化等一些列操作是有schedulerFacade和jobFacade完成。
schedulerFacade既然使用了facade模式那么必然scheduleFacde中存在大量服务需要被调用。如下图中显示facade所依赖的对象

file

SchedulerFacade

在jobSchedule分别在构造函数和init中对schedulerFacade完成了创建和更新。

schedulerFacade的初始化

schedulerFacade = new SchedulerFacade(regCenter, liteJobConfig.getJobName(), elasticJobListenerList);

在schedulerFacade中构造函数中对各个server进行了初始化,诸如leaderService,serverService等。这个过程中主要是将jobConf的信息传递到各个service,使其完成各个服务的创建。

schedulerFacade的job的持久化

在jobSchedule的init方法中涉及到节点的持久化,为什么到这个时候采用持久化节点,因为schedule的init的时候在调用quartz完成job的启动,所以这个job任务的选举分片也只有在这个过程中才可以处理。

LiteJobConfiguration liteJobConfigFromRegCenter = schedulerFacade.updateJobConfiguration(liteJobConfig);
public LiteJobConfiguration updateJobConfiguration(final LiteJobConfiguration liteJobConfig) {
        configService.persist(liteJobConfig);
        return configService.load(false);
    }

上面两段代码一段是jobSchedule中init的schedulerFacade对job任务的更新,这个过程是将job持久化到zk的过程。

schedulerFacade的主节点选举

持久化结束之后,jobschedule创建quartz的job并启动quartz,启动完成quartz之后需要牵扯的一个主节点的选举和分片。

public void registerStartUpInfo(final boolean enabled) {
        listenerManager.startAllListeners();
        leaderService.electLeader();
        serverService.persistOnline(enabled);
        instanceService.persistOnline();
        shardingService.setReshardingFlag();
        monitorService.listen();
        if (!reconcileService.isRunning()) {
            reconcileService.startAsync();
        }
    }

elasticJob过程中主节点选举过程比较简单,仅仅是zk节点的抢占,并没牵扯其他

public void executeInLeader(final String latchNode, final LeaderExecutionCallback callback) {
        try (LeaderLatch latch = new LeaderLatch(getClient(), jobNodePath.getFullPath(latchNode))) {
            latch.start();
            latch.await();
            callback.execute();
        } catch (final Exception ex) {
            handleException(ex);
        }
    }

抢占之后主节点内容如下192.168.0.109@-@767
facade里面包含服务比较多,会分成多个篇幅依次写出。

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP