全部產品
Search
文件中心

Microservices Engine:10分鐘快速體驗

更新時間:Apr 24, 2025

通過將應用鏡像上傳到阿里雲的Container Service平台,並接入任務調度平台,可以有效地進行定時任務調度和任務分區,實現高效的任務管理和調度。

前提條件

方案概覽

本方案以產品提供的業務應用Demo鏡像為例,通過ACK Serverless和SAE兩種部署方式,將Demo鏡像部署到容器,然後接入到分布式任務調度平台XXL-JOB,進行單機和分區廣播的定時任務測試,協助您全面瞭解和掌握XXL-JOB的使用與配置。大致分為以下幾步:

  1. 建立應用:在XXL-JOB平台建立應用,方便對任務叢集化查看、配置和調度,提升管理效率。

  2. 部署Demo工程到容器:將業務鏡像通過ACK Serverless和SAE兩種部署方式,實現業務鏡像快速部署和擴充的能力。

  3. 測實驗證:確保已接入的應用能夠在XXL-JOB平台上正常自動化調度和管理,任務能夠按計劃準時準確執行。

步驟一:建立應用

  1. 登入MSE XXL-JOB控制台,並在頂部功能表列選擇地區。

  2. 單擊目標執行個體,進入執行個體詳情頁,在左側導覽列,選擇應用管理,單擊建立應用。填寫AppName名稱,使用系統自動產生的AccessToken,單擊確定

步驟二:部署Demo工程到容器

產品提供了公用的業務應用Demo鏡像:registry.cn-hangzhou.aliyuncs.com/schedulerx/xxljob-demo:2.4.1。可通過以下兩種方式,選擇其一部署Demo應用接入XXL-JOB執行個體測試體驗。

重要

確保任務部署叢集和XXL-JOB叢集在同一VPC中,且應用節點所在的安全性群組入方向配置允許 VPC 網段的訪問。

通過ACK Serverless部署

  1. 建立Container Service叢集。登入阿里雲Container Service控制台,建立一個ACK Serverless叢集。需為當前VPC開啟配置“SNAT”(VPC已配置過則可忽略),以便拉取Demo鏡像。

  2. 在左側導覽列的應用管理頁面,單擊目標應用操作列的接入配置

  3. 在Container Service控制台的叢集列表頁,單擊目的地組群,選擇工作負載 > 無狀態服務,點擊使用YAML建立資源,本文以接入方式2(通過-D參數重啟應用)為例進行接入配置,替換YAML的JAVA_OPTS列中,將YAML配置填充啟動。

    image

    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.4.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部署

  1. 建立Serverless應用叢集。登入阿里雲Serverless應用引擎SAE,進入應用管理 > 微服務應用,單擊建立應用,建立一個微服務應用。

  2. 建立應用並配置應用基本資料。選擇已有命名空間,選擇對應VPC下的交換器/安全性群組。點擊設定鏡像,切換到自訂鏡像,輸入Demo鏡像地址:registry.cn-hangzhou.aliyuncs.com/schedulerx/xxljob-demo:2.4.1後,單擊下一步。

    重要

    對應命名空間需要綁定XXL-JOB執行個體叢集所在的VPC。

3. 進行進階設定,配置JAVA_OPTS環境變數。

環境變數值參數擷取如下:

登入MSE XXL-JOB控制台,並在頂部功能表列選擇地區。單擊目標執行個體,進入執行個體詳情頁。在左側導覽列的應用管理頁面,單擊目標應用操作列的接入配置。本文以接入方式2為例,配置JAVA_OPTS環境變數。

image

4. 單擊建立應用,等待應用執行個體建立完成。

步驟三:測實驗證

1.執行器接入驗證

進入目標執行個體詳情頁,單擊左側導覽列的應用管理,在應用列表頁面,單擊目標應用的執行器數量,可看到接入的執行器地址和線上狀態。

image

2.任務測實驗證

官方提供的Demo鏡像中包含測試Job代碼,以供快速測實驗證,其中包含如下jobHandler

  • 單機任務JobHandlerhelloworld

  • 分區廣播任務JobHandlershardingJobHandler

參考代碼內容如下

@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;
    }

}

單機任務測試

單機任務表示每次執行在該應用下的所有執行器中按照路由策略選一台等冪執行。

  1. 在左側導覽列,選擇任務管理,單擊建立任務。首先進行基本配置,填寫任務名稱jobHandler名稱關聯應用選擇目標應用,路由策略選擇輪詢,然後單擊下一步

    image

  2. 進行定時配置時間類型選擇cron,通過單擊使用產生工具按鈕,產生cron運算式。本樣本以每天12時執行一次為例,然後單擊下一步

    image

  3. 進行通知配置,您可以在此配置逾時警示、成功通知、失敗警示、通知方式、通知對象。本樣本以控制台預設配置為例。

    image

  4. 建立完成後,單擊目標任務操作列中的運行一次,在手動執行任務彈框中,指定機器,配置執行個體參數,單擊確定

    image

  5. 單擊更多 > 調度記錄,查看任務執行記錄。

  6. 單擊左側導覽列執行列表,單擊目標執行記錄操作列中的日誌,查看本次任務的執行日誌記錄。

    image

分區廣播任務測試

廣播分區表示每次執行會廣播該應用下所有執行器執行,每個執行器能拿到不同的分區號,可以用來做分布式批處理。開源XXL-JOB分區廣播無彙總功能,阿里雲XXL-JOB可以彙總展示每次執行的所有分區情況。

  1. 在左側導覽列,選擇任務管理,單擊建立任務。首先進行基本配置,填寫任務名稱jobHandler名稱關聯應用選擇目標應用,路由策略選擇分區廣播。然後單擊下一步

    image

  2. 進行定時配置時間類型選擇cron,通過單擊使用產生工具按鈕,產生cron運算式。本樣本以每小時第10分執行一次為例,然後單擊下一步

    image

  3. 進行通知配置,您可以在此配置設定逾時警示、成功通知、失敗警示、通知方式、通知對象。本樣本以控制台預設配置為例。

    image

  4. 建立完成後,單擊目標任務操作列中的運行一次,在手動執行任務彈框中,指定機器,配置執行個體參數,單擊確定

    image

  5. 單擊更多 > 調度記錄,查看任務執行記錄。

  6. 單擊左側導覽列的執行列表,在任務執行列表頁,單擊目標任務執行操作列中的詳情,在分區詳情中可彙總展示每台機器的執行情況。

    image

  7. 針對每個分區,單擊指定分區操作列中的日誌,查看本次任務的執行日誌記錄。

    image