當(dāng)前項(xiàng)目是基于SpringCloud,服務(wù)注冊中心(eurake,nacos...)進(jìn)行任務(wù)調(diào)度的思路。
目前完成的功能有:任務(wù)自動(dòng)注冊,任務(wù)統(tǒng)一管理,集中調(diào)度,支持多種路由規(guī)則(可拓展),任務(wù)調(diào)度日志,輕量級無需依賴quartz。
分布式任務(wù)調(diào)度和單體應(yīng)用的任務(wù)調(diào)度的區(qū)別在于,通過將任務(wù)集中統(tǒng)一管理,無需每一個(gè)微服務(wù)都維護(hù)自己的任務(wù)。下面通過一個(gè)簡單的示例來看看分布式任務(wù)調(diào)度的構(gòu)建流程。
主要分為兩大部分任務(wù)管理組件,和任務(wù)執(zhí)行組件(都可以通過水平拓展來增加服務(wù)的容錯(cuò)性穩(wěn)定性)
示例代碼:https://github.com/awyFamily/nc-job.git
一、分布式任務(wù)管理中心部署:
1.新建數(shù)據(jù)庫ncjob,執(zhí)行初始化文件(resource/init/init.sql)
2.如果是基于eurake,則在pom文件中引用eurake client依賴,yml加入eurake配置【nacos同理】
3.更改yml文件中數(shù)據(jù)庫配置信息
4.運(yùn)行啟動(dòng)類
5.添加測試任務(wù)(需要先啟動(dòng)example項(xiàng)目)

6.立即執(zhí)行測試
執(zhí)行測試類,或請求url:? localhost:9999/jobInfo/running/1
響應(yīng):被立即執(zhí)行了

7.日志輸出

二、執(zhí)行器任務(wù)快速開始:
1.引入依賴包
<dependency>? ??
????<groupId>com.awyFamily</groupId>????
????<artifactId>nc-job-core</artifactId>? ??
????<version>${nc.job.version}</version>
</dependency>?
2.yml文件加入配置
#任務(wù)配置
nc:job:??provider:? ?
????????????????#服務(wù)實(shí)例名(當(dāng)前執(zhí)行器)????
????????????????jobServerId: nc-job-example? ?
????????????????#任務(wù)包路徑????
????????????????taskPackagePath: com.yhw.nc.job.example.handler
3.增加配置類(主要作用掃描包)
@EnableFeignClients(JobCommonConstant.ADMIN_FEIGN_REMOTE_PATH)
@ComponentScan(JobCommonConstant.JOB_SCAN_PACKAGE_PATH)
@Configurationpublic class NcJobConfig {
}
4.開始第一個(gè)任務(wù),在taskPackagePath包下新建任務(wù),注意getName方法的值必須唯一,否則會(huì)導(dǎo)致重名任務(wù)找不到的情況
@Slf4j
@Component
public class TestNcTask extends AbstractNcTask {????
????????@Override????
????????protected void run(Integer jobId, String parameter) {????????
????????????log.info("開始運(yùn)行了:".concat(LocalDateTime.now().format(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN))));???
?????????}????
????@Override????protected String getName() {????????
????????????return "測試任務(wù)";???
?????}
}?
5.運(yùn)行啟動(dòng)類
啟動(dòng)后會(huì)自動(dòng)注冊任務(wù)的數(shù)據(jù)庫:
如圖所示:


三、其他信息
基于nacos實(shí)現(xiàn):https://github.com/sunboy1/nacos_cloud.git
springboot單機(jī)版,基于quartz :https://github.com/sunboy1/quartz.git
想要了解分布式調(diào)度更多的信息請關(guān)注:https://github.com/xuxueli/xxl-job