10分鐘快速體驗
通過將應用鏡像上傳到阿里云的容器服務平臺,并接入任務調度平臺,可以有效地進行定時任務調度和任務分片,實現高效的任務管理和調度。
視頻演示
如需快速接入并體驗XXL-JOB,請參見10分鐘快速體驗XXL-JOB視頻演示。
前提條件
方案概覽
本方案以產品提供的業務應用Demo鏡像為例,通過ACK Serverless和SAE兩種部署方式,將Demo鏡像部署到容器,然后接入到分布式任務調度平臺XXL-JOB,進行單機和分片廣播的定時任務測試,幫助您全面了解和掌握XXL-JOB的使用與配置。大致分為以下幾步:
創建應用:在XXL-JOB平臺創建應用,方便對任務集群化查看、配置和調度,提升管理效率。
部署Demo工程到容器:將業務鏡像通過ACK Serverless和SAE兩種部署方式,實現業務鏡像快速部署和擴展的能力。
測試驗證:確保已接入的應用能夠在XXLJOB平臺上正常自動化調度和管理,任務能夠按計劃準時準確執行。
步驟一:創建應用
登錄XXL-JOB控制臺,并在頂部菜單欄選擇地域。
單擊目標實例,進入實例詳情頁,在左側導航欄,選擇
,單擊創建應用。填寫AppName和名稱,使用系統自動生成的AccessToken,單擊確定。
步驟二:部署Demo工程到容器
產品提供了公共的業務應用Demo鏡像:registry.cn-hangzhou.aliyuncs.com/schedulerx/xxljob-demo:2.2.1
。可通過以下兩種方式,選擇其一部署Demo應用接入XXLJOB實例測試體驗。
確保任務部署集群和XXLJOB集群在同一VPC中,且應用節點所在的安全組入方向配置允許 VPC 網段的訪問。
通過ACK Serverless部署
創建容器服務集群。登錄阿里云容器服務控制臺,創建一個ACK Serverless集群。需為當前VPC開啟配置“SNAT”(VPC已配置過則可忽略),以便拉取Demo鏡像。
在左側導航欄的
頁面,單擊目標應用操作列的接入配置。在容器服務控制臺的集群列表頁,單擊目標集群,選擇
服務,點擊使用YAML創建資源,本文以接入方式2(通過-D參數重啟應用)為例進行接入配置,替換YAML的JAVA_OPTS列中,將YAML配置填充啟動。apiVersion: apps/v1 kind: Deployment metadata: name: xxljob-demo labels: app: xxljob-demo spec: replicas: 2 selector: matchLabels: app: xxljob-demo template: metadata: labels: app: xxljob-demo spec: containers: - name: xxljob-executor image: registry.cn-hangzhou.aliyuncs.com/schedulerx/xxljob-demo:2.2.1 ports: - containerPort: 9999 env: - name: JAVA_OPTS value: >- -Dxxl.job.admin.addresses=http://xxljob-xxxxx.schedulerx.mse.aliyuncs.com -Dxxl.job.executor.appname=xxxxx -Dxxl.job.accessToken=xxxxxxx
通過SAE部署
創建Serverless應用集群。登錄阿里云Serverless應用引擎SAE,進入 ,單擊創建應用,創建一個微服務應用。
創建應用并配置應用基本信息。選擇已有命名空間,選擇對應VPC下的交換機/安全組。點擊設置鏡像,切換到自定義鏡像,輸入Demo鏡像地址:
registry.cn-hangzhou.aliyuncs.com/schedulerx/xxljob-demo:2.2.1
后,單擊下一步。重要對應命名空間需要綁定XXLJOB實例集群所在的VPC。
3. 進行高級設置,配置JAVA_OPTS環境變量。
環境變量值參數獲取如下:
登錄XXL-JOB控制臺,并在頂部菜單欄選擇地域。單擊目標實例,進入實例詳情頁。在左側導航欄的應用管理頁面,單擊目標應用操作列的接入配置。本文以接入方式2為例,配置JAVA_OPTS環境變量。
4. 單擊創建應用,等待應用實例創建完成。
步驟三:測試驗證
1.執行器接入驗證
進入目標實例詳情頁,單擊左側導航欄的應用管理,在應用列表頁面,單擊目標應用的執行器數量,可看到接入的執行器地址和在線狀態。
2.任務測試驗證
官方提供的Demo鏡像中包含測試Job代碼,以供快速測試驗證,其中包含如下jobHandler:
單機任務JobHandler:helloworld。
分片廣播任務JobHandler:shardingJobHandler。
@Component
public class SampleXxlJob {
private static Logger logger = LoggerFactory.getLogger(SampleXxlJob.class);
/**
* 1、簡單任務示例,立即返回
*/
@XxlJob("helloworld")
public ReturnT<String> helloworld(String param) throws Exception {
XxlJobLogger.log("XXL-JOB, Hello World, param=" + param);
System.out.println("XXL-JOB, Hello World, finished");
return ReturnT.SUCCESS;
}
/**
* 2、簡單任務示例,循環5次
*/
@XxlJob("demoJobHandler")
public ReturnT<String> demoJobHandler(String param) throws Exception {
XxlJobLogger.log("XXL-JOB, demoJobHandler, param=" + param);
System.out.println("XXL-JOB, demoJobHandler, start...");
for (int i = 0; i < 5; i++) {
System.out.println("beat at:" + i);
XxlJobLogger.log("beat at:" + i);
TimeUnit.SECONDS.sleep(2);
}
System.out.println("XXL-JOB, demoJobHandler, end...");
return ReturnT.SUCCESS;
}
/**
* 3、分片廣播任務
*/
@XxlJob("shardingJobHandler")
public ReturnT<String> shardingJobHandler(String param) throws Exception {
// 分片參數
ShardingUtil.ShardingVO shardingVO = ShardingUtil.getShardingVo();
XxlJobLogger.log("分片參數:當前分片序號 = {}, 總分片數 = {}", shardingVO.getIndex(), shardingVO.getTotal());
// 業務邏輯
for (int i = 0; i < shardingVO.getTotal(); i++) {
if (i == shardingVO.getIndex()) {
XxlJobLogger.log("第 {} 片, 命中分片開始處理", i);
} else {
XxlJobLogger.log("第 {} 片, 忽略", i);
}
}
return ReturnT.SUCCESS;
}
/**
* 4、生命周期任務示例:任務初始化與銷毀時,支持自定義相關邏輯;
*/
@XxlJob(value = "demoJobHandler2", init = "init", destroy = "destroy")
public ReturnT<String> demoJobHandler2(String param) throws Exception {
XxlJobLogger.log("XXL-JOB, Hello World.");
return ReturnT.SUCCESS;
}
public void init(){
logger.info("init");
}
public void destroy(){
logger.info("destory");
}
/**
* 5、失敗任務測試,1/0會拋異常;
*/
@XxlJob(value = "failedJobHandler")
public ReturnT<String> failedJobHandler(String param) throws Exception {
XxlJobLogger.log("XXL-JOB, Hello World.");
int a = 1/0;
return ReturnT.SUCCESS;
}
}
單機任務測試
單機任務表示每次執行在該應用下的所有執行器中按照路由策略選一臺冪等執行。
在左側導航欄,選擇任務管理,單擊創建任務。首先進行基本配置,填寫任務名稱和jobHandler名稱,關聯應用選擇目標應用,路由策略選擇輪詢,然后單擊下一步。
進行定時配置,時間類型選擇cron,通過單擊使用生成工具按鈕,生成cron表達式。本示例以每天12時執行一次為例,然后單擊下一步。
進行通知配置,您可以在此配置超時報警、成功通知、失敗報警、通知方式、通知對象。本示例以控制臺默認配置為例。
創建完成后,單擊目標任務操作列中的運行一次,在手動執行任務彈框中,指定機器,配置實例參數,單擊確定
單擊
,查看任務執行記錄。單擊左側導航欄執行列表,單擊目標執行記錄操作列中的日志,查看本次任務的執行日志記錄。
分片廣播任務測試
廣播分片表示每次執行會廣播該應用下所有執行器執行,每個執行器能拿到不同的分片號,可以用來做分布式批處理。開源XXLJOB分片廣播無聚合功能,阿里云XXLJOB可以聚合展示每次執行的所有分片情況。
在左側導航欄,選擇任務管理,單擊創建任務。首先進行基本配置,填寫任務名稱和jobHandler名稱,關聯應用選擇目標應用,路由策略選擇分片廣播。然后單擊下一步。
進行定時配置,時間類型選擇cron,通過單擊使用生成工具按鈕,生成cron表達式。本示例以每小時第10分執行一次為例,然后單擊下一步。
進行通知配置,您可以在此配置設置超時報警、成功通知、失敗報警、通知方式、通知對象。本示例以控制臺默認配置為例。
創建完成后,單擊目標任務操作列中的運行一次,在手動執行任務彈框中,指定機器,配置實例參數,單擊確定。
單擊
,查看任務執行記錄。單擊左側導航欄的執行列表,在任務執行列表頁,單擊目標任務執行操作列中的詳情,在分片詳情中可聚合展示每臺機器的執行情況。
針對每個分片,單擊指定分片操作列中的日志,查看本次任務的執行日志記錄。