實現(xiàn)任務(wù)調(diào)度
在EDAS控制臺中,已經(jīng)無縫集成了阿里巴巴的分布式任務(wù)調(diào)度系統(tǒng)SchedulerX作為核心組件,以實現(xiàn)高效的任務(wù)調(diào)度管理功能。本文將介紹如何在您的Spring Cloud應(yīng)用中使用SchedulerX實現(xiàn)任務(wù)調(diào)度,并部署到EDAS中,實現(xiàn)一個簡單Job單機版的任務(wù)調(diào)度功能。
為什么使用SchedulerX
SchedulerX是阿里巴巴的一款分布式任務(wù)調(diào)度產(chǎn)品。它為您提供秒級、精準、高可靠、高可用的定時(基于Cron表達式)任務(wù)調(diào)度服務(wù),同時提供分布式的任務(wù)執(zhí)行模型,如MapReduce模型。
在本地實現(xiàn)任務(wù)調(diào)度
創(chuàng)建命名為
scx-example
的Maven工程。以Spring Boot 2.1.4.RELEASE和Spring Cloud Finchley.SR1為例,在pom.xml文件中添加如下依賴。
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.4.RELEASE</version> <relativePath/> </parent> <dependencies> <dependency> <groupId>com.aliyun.schedulerx</groupId> <artifactId>schedulerx2-spring-boot-starter</artifactId> <version>${schedulerx2.version}</version> <!--如果用的是logback,需要把log4j和log4j2排除掉 --> <exclusions> <exclusion> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> </exclusion> <exclusion> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> </exclusion> <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Finchley.SR1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
說明如果您需要選擇使用Spring Boot 1.x的版本,請使用Spring Boot 1.5.x和Spring Cloud Edgware版本,對應(yīng)的Spring Cloud Alibaba版本為1.5.1.RELEASE。
Spring Boot 1.x版本的生命周期已結(jié)束,推薦使用Spring Boot新版本開發(fā)您的應(yīng)用。
創(chuàng)建
scx-example
的啟動類ScxApplication
。import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class ScxApplication { public static void main(String[] args) { SpringApplication.run(ScxApplication.class, args); } }
創(chuàng)建一個簡單的類
TestService
,通過Spring向測試任務(wù)中的IoC進行注入。import org.springframework.stereotype.Service; @Service public class TestService { public void test() { System.out.println("---------IOC Success--------"); } }
創(chuàng)建一個簡單的
SimpleTask
作為測試任務(wù)類,并在其中注入TestService
。import com.alibaba.edas.schedulerx.ProcessResult; import com.alibaba.schedulerx.worker.domain.JobContext; import com.alibaba.schedulerx.worker.processor.JavaProcessor; import org.springframework.beans.factory.annotation.Autowired; public class SimpleTask implements ScxSimpleJobProcessor { @Autowired private TestService testService; @Override public ProcessResult process(JobContext context) { System.out.println("-----------Hello world---------------"); testService.test(); return new ProcessResult(true); } }
創(chuàng)建調(diào)度任務(wù)并添加配置。
登錄EDAS控制臺,在測試地域中創(chuàng)建任務(wù)分組并記錄分組ID。具體操作,請參見應(yīng)用管理。
在創(chuàng)建的任務(wù)分組中按以下參數(shù)創(chuàng)建任務(wù)。具體操作,請參見創(chuàng)建調(diào)度任務(wù)。
應(yīng)用ID:選擇在測試地域下剛創(chuàng)建的任務(wù)分組。
Processor類名:Job處理接口實現(xiàn)類的全類名,本文檔中為SimpleTask,和應(yīng)用中的測試任務(wù)類保持一致。
執(zhí)行模式:單機運行。
cron表達式:默認選項,
*0 * * * * ?*
表示任務(wù)每分鐘會被執(zhí)行一次。描述:無
任務(wù)參數(shù):無
在本地Maven工程的src/main/resources路徑下創(chuàng)建文件application.properties,在其中添加如下配置。
server.port=18033 # 配置任務(wù)的地域(測試地域?qū)?yīng)的**regionName**為*cn-test*)和分組ID(group-id) spring.schedulerx2.endpoint=acm.aliyun.com spring.schedulerx2.namespace=d1ce9d38-ab9b-444e-ab2a-4***** spring.schedulerx2.groupId=**** spring.schedulerx2.appKey=5pHlwaWpluJGd39******
執(zhí)行
ScxApplication
中的main函數(shù),啟動服務(wù)。
結(jié)果驗證
在IDEA的Console中觀察標準輸出,可以看到會定時地打印出如下的測試信息。
-----------Hello world---------------
---------IOC Success--------
部署到EDAS
SchedulerX在設(shè)計之初就考慮到了從開發(fā)環(huán)境遷移到EDAS的場景,您可以直接將應(yīng)用部署到EDAS中,無需修改任何代碼和配置。關(guān)于部署方式和詳細步驟的相關(guān)內(nèi)容,請參見創(chuàng)建和部署應(yīng)用概述(K8s)和應(yīng)用創(chuàng)建和部署概述(ECS)。
在部署完成之后,即可使用EDAS控制臺進行任務(wù)調(diào)度。
在非測試地域使用調(diào)度任務(wù)的附加步驟
本文檔以在測試地域中使用為例,測試環(huán)境為公網(wǎng)環(huán)境,您在本地或云端都可以進行驗證,且沒有權(quán)限的限制。如果您要部署到其它地域(如杭州)中,還需要在創(chuàng)建調(diào)度任務(wù)并調(diào)度的步驟中完成以下操作:
登錄EDAS控制臺,在測試地域中創(chuàng)建任務(wù)分組并記錄分組ID。具體操作,請參見應(yīng)用管理。
登錄安全信息管理頁面,獲取AccessKey ID和AccessKey Secret。
在
application.properties
文件中配置調(diào)度任務(wù)。除了簡單Job單機版,您還可以配置其它類型的調(diào)度任務(wù)。相關(guān)內(nèi)容,請參見什么是分布式任務(wù)調(diào)度SchedulerX。
在
application.properties
文件中添加您阿里云賬號的AccessKey ID和AccessKey Secret的配置。spring.cloud.alicloud.access-key=xxxxx spring.cloud.alicloud.secret-key=xxxxx
后續(xù)操作
您的應(yīng)用部署到EDAS之后,就可以使用SchedulerX組件實現(xiàn)更多任務(wù)調(diào)度的能力。相關(guān)內(nèi)容,請參見什么是分布式任務(wù)調(diào)度SchedulerX。