すべてのプロダクト
Search
ドキュメントセンター

Microservices Engine:10 分で始める

最終更新日:Apr 24, 2025

アプリケーションイメージを Container Service for Kubernetes (ACK)コンソールにアップロードし、アプリケーションを XXL-JOB に接続できます。 これにより、ジョブをスケジュールし、ジョブシャーディングを効率的に実行できます。

前提条件

  • RAM ユーザーには、XXL-JOB に必要な権限が付与されています。 詳細については、「XXL-JOB 権限付与」をご参照ください。

  • XXL-JOB インスタンスが作成されています。 詳細については、「インスタンスの作成」をご参照ください。

概要

このソリューションでは、ACK Serverless または Serverless App Engine (SAE)を使用してコンテナーにイメージをデプロイし、アプリケーションを開発およびデプロイし、アプリケーションを XXL-JOB に接続し、スタンドアロンおよびシャーディングブロードキャストジョブを使用して接続されたアプリケーションをテストする方法の例を示します。 この例では、XXL-JOB によって提供されるデモアプリケーションイメージを使用します。 これは、XXL-JOB の使用と構成を理解するのに役立ちます。 このソリューションを実装するには、次の手順を実行します。

  1. アプリケーションの作成: XXL-JOB でアプリケーションを作成して、ジョブを一元管理できます。 これにより、ジョブを簡単に表示、構成、スケジュールでき、ジョブ管理の効率が向上します。

  2. デモプロジェクトをコンテナーにデプロイする: ACK Serverless または SAE を使用して、デモイメージをすばやくデプロイおよびスケーリングできます。

  3. テストと検証の実行: 接続されたアプリケーションのジョブが XXL-JOB で自動的にスケジュールおよび管理され、ジョブが指定された時点で実行されることを確認できます。

手順 1: アプリケーションを作成する

  1. MSE コンソール にログインし、上部のナビゲーションバーでリージョンを選択します。

  2. 表示されるページで、インスタンスの ID をクリックしてインスタンスの詳細ページに移動します。インスタンスの詳細ページで、左側のナビゲーションウィンドウの [アプリケーション管理] をクリックします。表示されるページで、[アプリケーションの作成] をクリックします。[アプリケーションの作成] パネルで、[AppName] パラメーターと [名前] パラメーターを構成し、[アクセストークン] に対して [自動生成] をクリックしてアクセストークンを取得し、[OK] をクリックします。

手順 2: デモプロジェクトをコンテナーにデプロイする

XXL-JOB は、次のパブリックデモアプリケーションイメージを提供します: registry.cn-hangzhou.aliyuncs.com/schedulerx/xxljob-demo:2.4.1。 次のいずれかの方法を使用して、デモアプリケーションをデプロイし、XXL-JOB に接続できます。

重要

アプリケーションがデプロイされているクラスターが XXL-JOB インスタンスと同じ VPC 内にあり、アプリケーションノードが属するセキュリティグループのインバウンドルールで VPC の CIDR ブロックからのアクセスが許可されていることを確認してください。

ACK Serverless

  1. ACK コンソール にログインします。 [クラスター] ページで、[Kubernetes クラスターの作成] をクリックします。 購入ページの [ACK Serverless] タブで、[VPC の SNAT を構成する] を選択して、イメージのプルを容易にします。 VPC に SNAT がすでに構成されている場合は、この操作をスキップします。

  2. 表示されるページで、左側のナビゲーションウィンドウの [アプリケーション管理] をクリックします。 次に、目的のアプリケーションを見つけ、[操作] 列の [アクセス構成] をクリックします。

  3. ACK コンソールの [クラスター] ページで、作成したクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、[ワークロード] > [デプロイメント] を選択します。 [デプロイメント] ページで、[YAML から作成] をクリックします。 この例では、アクセス方法 2 が使用され、-D パラメーターを使用してアプリケーションが再起動されます。 アクセス方法によって提供されるコードをコピーし、JAVA_OPTS 環境変数の値をコピーされたコードに置き換えます。

    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. SAE コンソール にログインし、左側のナビゲーションウィンドウの [アプリケーション管理] > [アプリケーション] を選択します。 [アプリケーション] ページで、[アプリケーションの作成] をクリックしてアプリケーションを作成します。

  2. アプリケーションの基本情報を設定します。既存の名前空間を選択し、名前空間に関連付けられている VPC 内の vSwitch とセキュリティグループを選択します。[アプリケーション デプロイメント方法] セクションで [イメージを指定] をクリックします。[イメージを指定] パネルの [カスタム イメージ] タブで、デモ イメージの次の URL を入力します:registry.cn-hangzhou.aliyuncs.com/schedulerx/xxljob-demo:2.4.1。次に、[OK] をクリックします。

    重要

    選択する名前空間は、XXL-JOB インスタンスが存在する VPC に関連付けられている必要があります。

3. 詳細設定JAVA_OPTS ステップで、 環境変数を構成します。

次の操作を実行することで、環境変数の値を取得できます。

MSE コンソール にログインし、上部のナビゲーションバーでリージョンを選択します。 [XXL-JOB バージョン] ページで、アプリケーションを接続するインスタンスを見つけ、インスタンス ID をクリックします。 インスタンスの詳細ページが表示されます。 左側のナビゲーションウィンドウで、[アプリケーション管理] をクリックします。 表示されるページで、作成したアプリケーションを見つけ、[操作] 列の [アクセス構成] をクリックします。 この例では、アクセス方法 2 が使用されます。 アクセス方法によって提供されるコードをコピーし、コピーされたコードを JAVA_OPTS 環境変数の値として使用します。

image

4. [ワンクリックでアプリケーションを作成] をクリックします。 アプリケーションが SAE コンソールに作成されます。

手順 3: テストと検証を実行する

1. エグゼキューターを確認する

MSE コンソールのインスタンス詳細ページで、左側のナビゲーションウィンドウの [アプリケーション管理] をクリックします。 [アプリケーション管理] ページで、デプロイされたアプリケーションを見つけ、[アクチュエーターの数] 列の値をクリックして、各エグゼキューターの IP アドレスとオンラインステータスを表示します。

image

2. ジョブをテストする

デモイメージには、さまざまなタイプのジョブの 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("シャードパラメーター: 現在のシャード ID = {}, シャードの総数 = {}", 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. インスタンスの詳細ページで、左側のナビゲーションウィンドウの [タスク管理] をクリックします。表示されるページで、[タスクの作成] をクリックします。[タスクの作成] パネルの [基本構成] ステップで、[タスク名] パラメーターと [ジョブハンドラ名] パラメーターを構成し、[関連付けられたアプリケーション] ドロップダウンリストからデプロイ済みのアプリケーションを選択し、[ルーティングポリシー] パラメーターを [ポーリング] に設定して、[次のステップ] をクリックします。

    image

  2. [タイミング構成] ステップで、[時間タイプ] パラメーターを cron に設定し、[ビルドツールを使用する] をクリックして [cron 式] を生成します。 この例では、ジョブは毎日 12:00 に 1 回実行されます。 次に、[次のステップ] をクリックします。

    image

  3. [通知構成] ステップでは、実行タイムアウト、実行成功、および実行失敗のアラートを構成し、通知方法とアラート連絡先を指定できます。 この例では、コンソールのデフォルト構成を使用します。

    image

  4. ジョブが作成されたら、[タスク管理] ページでジョブを見つけ、[操作] 列の [1 回実行] をクリックします。 [タスクを手動で実行する] ダイアログボックスで、ジョブを実行するマシンを選択し、インスタンスパラメーターを入力して、[OK] をクリックします。

    image

  5. [タスク管理] ページでジョブを見つけ、[操作] 列の [詳細] > [スケジューリングレコード] を選択して、ジョブの実行レコードを表示します。

  6. インスタンス詳細ページで、左側のナビゲーションウィンドウの [実行リスト] をクリックします。 表示されるページで、表示する実行レコードを見つけ、[操作] 列の [ログ] をクリックして、ジョブ実行のログを表示します。

    image

シャーディングブロードキャストジョブ

シャーディングブロードキャストジョブは、アプリケーションのすべてのエグゼキューターで実行され、各エグゼキューターには一意のシャード番号が割り当てられます。 このタイプのジョブは、分散バッチ処理に適用できます。 集約機能をサポートしていないオープンソースの XXL-JOB とは異なり、XXL-JOB は各シャードでのシャーディングブロードキャストジョブの実行を集約して表示します。

  1. インスタンスの詳細ページで、左側のナビゲーションウィンドウの [タスク管理] をクリックします。表示されるページで、[タスクの作成] をクリックします。[タスクの作成] パネルの [基本構成] ステップで、[タスク名] パラメーターと [ジョブハンドラ名] パラメーターを構成し、[関連付けられたアプリケーション] ドロップダウンリストからデプロイ済みのアプリケーションを選択し、[ルーティングポリシー] パラメーターを [マルチパートブロードキャスト] に設定して、[次のステップ] をクリックします。

    image

  2. [タイミング構成] ステップで、[時間タイプ] パラメーターを cron に設定し、[ビルドツールを使用する] をクリックして [cron 式] を生成します。 この例では、ジョブは毎時 10 分に実行されます。 次に、[次のステップ] をクリックします。

    image

  3. [通知構成] ステップでは、実行タイムアウト、実行成功、および実行失敗のアラートを構成し、通知方法とアラート連絡先を指定できます。 この例では、コンソールのデフォルト構成を使用します。

    image

  4. ジョブが作成されたら、[タスク管理] ページでジョブを見つけ、[操作] 列の [1 回実行] をクリックします。 [タスクを手動で実行する] ダイアログボックスで、ジョブを実行する 1 つ以上のマシンを選択し、インスタンスパラメーターを入力して、[OK] をクリックします。

    image

  5. [タスク管理] ページでジョブを見つけ、[操作] 列の [詳細] > [スケジューリングレコード] を選択して、ジョブの実行レコードを表示します。

  6. インスタンス詳細ページで、左側のナビゲーションウィンドウの [実行リスト] をクリックします。 表示されるページで、表示する実行レコードを見つけ、[操作] 列の [詳細] をクリックします。 [スケジューリングの詳細] パネルの [スライス詳細] タブで、各マシンでの実行の詳細を表示します。

    image

  7. シャードを見つけ、[操作] 列の [ログ] をクリックして、シャードのジョブ実行のログを表示します。

    image