TaskManager 任務(wù)管理的使用
nacos 中很多地方使用了TaskManager 睛驳,所以我們得先了解下這個(gè)類是干啥的,方便后面閱讀不吃力膜廊。
先說(shuō)結(jié)論乏沸,TaskManager 可以看作是一個(gè)待執(zhí)行任務(wù)的集合,用于處理一定要執(zhí)行成功的任務(wù)單線程的處理任務(wù)爪瓜,保證任務(wù)一定被執(zhí)行成功蹬跃;如果執(zhí)行失敗了,任務(wù)會(huì)被重新放入集合中等待下一次的消費(fèi)铆铆。
AbstractTask
AbstractTask 是個(gè)抽象類蝶缀,所有需要被執(zhí)行的任務(wù)都會(huì)繼承這個(gè)類,這個(gè)類主要提供執(zhí)行任務(wù)所需要的數(shù)據(jù)和方法薄货;例如:
/**
* Task time interval between twice processing, unit is millisecond.
*/
private long taskInterval;
/**
* The time which was processed at last time, unit is millisecond.
*/
private long lastProcessTime;
public boolean shouldProcess() {
return (System.currentTimeMillis() - this.lastProcessTime >= this.taskInterval);
}
TaskProcessor任務(wù)處理器
TaskProcessor 是任務(wù)處理器接口,它有個(gè)方法
boolean process(String taskType, AbstractTask task);
用于執(zhí)行對(duì)應(yīng)的AbstractTask任務(wù)類; 不同的任務(wù)類型,可以實(shí)現(xiàn)自己的執(zhí)行任務(wù)邏輯;
TaskManager任務(wù)管理類
TaskManager 是個(gè)任務(wù)管理類;
它里面有兩個(gè)屬性保存了待消費(fèi)的任務(wù)AbstractTask,和任務(wù)執(zhí)行需要的TaskProcessor;
如果taskProcessors中沒(méi)有找到對(duì)應(yīng)的任務(wù)執(zhí)行器,那么它里面有一個(gè)默認(rèn)執(zhí)行器會(huì)執(zhí)行
private TaskProcessor defaultTaskProcessor;
使用用例
nacos 配置中心模塊很重要的一個(gè)功能就是翁都,在初始化的時(shí)候以及每隔一段時(shí)間就回去數(shù)據(jù)庫(kù)中把所有數(shù)據(jù)Dump到磁盤中;Dump就是一個(gè)任務(wù)類 AbstractTask;我們上面說(shuō)過(guò)谅猾,AbstractTask 就是一個(gè)信息承載對(duì)象柄慰,主要給TaskProcessor 提供所需要的數(shù)據(jù),我們看看DumpTask :
DumpTask
public DumpTask(String groupKey, long lastModified, String handleIp) {
this.groupKey = groupKey;
this.lastModified = lastModified;
this.handleIp = handleIp;
this.isBeta = false;
this.tag = null;
// retry interval: 1s
setTaskInterval(1000L);
}
既然有DumpTask任務(wù)類,那肯定就有對(duì)應(yīng)的任務(wù)處理器類DumpProcessor;
DumpProcessor
DumpProcessor 是DumpTask任務(wù)的執(zhí)行器;執(zhí)行器中的方法
public boolean process(String taskType, AbstractTask task) {}
代碼太長(zhǎng)就不在這里分析了,它里面主要做的操作就是 保存配置文件到本地磁盤中税娜,并緩存md5詳細(xì)可以參考后面文章DumpService如何將配置文件全部Dump到磁盤中