手把手帶你構(gòu)建一個(gè)簡單的springCloud分布式任務(wù)調(diào)度組件

當(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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容