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

:エグゼキュータ管理

最終更新日:Nov 09, 2025

アプリケーションを作成した後、タスクを実行するためにエグゼキュータを接続する必要があります。

標準アプリケーションをエグゼキュータに接続する

自動登録

自動登録を使用するには、アプリケーションが XXL-JOB SDK に依存している必要があります。接続設定を構成すると、アプリケーションの起動時にエグゼキュータが自動的に登録されます。

1. 接続設定の表示

  1. MSE XXL-JOB コンソールにログインします。

  2. ページの左上隅で、[リージョン] を選択します。

  3. ターゲットインスタンス ID をクリックします。左側のナビゲーションウィンドウで、[アプリケーション管理] を選択します。

  4. ターゲットアプリケーションを見つけます。[エグゼキュータ数] 列で、[接続] ボタンをクリックします。

  5. 接続タイプとして [自動登録] を選択し、構成を完了します。

2. SDK をインポートしてエグゼキュータを接続する

Java SDK

  1. pom.xml ファイルに `xxl-job-core` Maven 依存関係を追加します。

  2. エグゼキュータを初期化します。

    @Configuration
    public class XxlJobConfig {
        private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);
    
        @Value("${xxl.job.admin.addresses}")
        private String adminAddresses;
    
        @Value("${xxl.job.accessToken}")
        private String accessToken;
    
        @Value("${xxl.job.executor.appname}")
        private String appname;
    
        @Value("${xxl.job.executor.address}")
        private String address;
    
        @Value("${xxl.job.executor.ip}")
        private String ip;
    
        @Value("${xxl.job.executor.port}")
        private int port;
    
        @Value("${xxl.job.executor.logpath}")
        private String logPath;
    
        @Value("${xxl.job.executor.logretentiondays}")
        private int logRetentionDays;
    
        @Bean
        public XxlJobSpringExecutor xxlJobExecutor() {
            logger.info(">>>>>>>>>>> xxl-job config init.");
            XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
            xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
            xxlJobSpringExecutor.setAppname(appname);
            xxlJobSpringExecutor.setAddress(address);
            xxlJobSpringExecutor.setIp(ip);
            xxlJobSpringExecutor.setPort(port);
            xxlJobSpringExecutor.setAccessToken(accessToken);
            xxlJobSpringExecutor.setLogPath(logPath);
            xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
    
            return xxlJobSpringExecutor;
        }
    
    }

Go SDK

  1. 次のコマンドを実行して、最新のタグを使用して XXL-JOB Go SDK をプルします。

    go get github.com/xxl-job/xxl-job-executor-go@{latest_tag}
  2. アプリケーションコードを記述します。

    package main
    
    import (
        "context"
        "fmt"
        xxl "github.com/xxl-job/xxl-job-executor-go"
        "github.com/xxl-job/xxl-job-executor-go/example/task"
        "log"
    )
    
    func main() {
        exec := xxl.NewExecutor(
            xxl.ServerAddr("xxxxxx"),       // リクエストアドレス。コンソールのアプリケーション管理セクションの接続設定から取得します。
            xxl.AccessToken("xxxxxxx"),     // アクセストークン。コンソールのアプリケーション管理セクションの接続設定から取得します。
            xxl.ExecutorPort("9999"),       // デフォルトのポートは 9999 です。このパラメーターはオプションです。
            xxl.RegistryKey("golang-jobs"), // エグゼキュータの名前。
            xxl.SetLogger(&logger{}),       // カスタムロガー。
        )
        exec.Init()
        exec.Use(customMiddleware)
        // ログ表示用のハンドラを設定します。
        exec.LogHandler(customLogHandle)
        // タスクハンドラを登録します。
        exec.RegTask("task.test", task.Test)
        exec.RegTask("task.test2", task.Test2)
        exec.RegTask("task.panic", task.Panic)
        log.Fatal(exec.Run())
    }
    
    // カスタムログハンドラ。
    func customLogHandle(req *xxl.LogReq) *xxl.LogRes {
        return &xxl.LogRes{Code: xxl.SuccessCode, Msg: "", Content: xxl.LogResContent{
            FromLineNum: req.FromLineNum,
            ToLineNum:   2,
            LogContent:  "This is a custom log handler.",
            IsEnd:       true,
        }}
    }
    
    // xxl.Logger インターフェイスの実装。
    type logger struct{}
    
    func (l *logger) Info(format string, a ...interface{}) {
        fmt.Println(fmt.Sprintf("Custom log - "+format, a...))
    }
    
    func (l *logger) Error(format string, a ...interface{}) {
        log.Println(fmt.Sprintf("Custom log - "+format, a...))
    }
    
    // カスタムミドルウェア。
    func customMiddleware(tf xxl.TaskFunc) xxl.TaskFunc {
        return func(cxt context.Context, param *xxl.RunReq) string {
            log.Println("I am a middleware start")
            res := tf(cxt, param)
            log.Println("I am a middleware end")
            return res
        }
    }
    

Python SDK

  1. 依存関係をインストールします。

    pip install pyxxl
    
    # ログを Redis に書き込むには
    pip install "pyxxl[redis]"
    
    # .env ファイルから構成を読み込むには
    pip install "pyxxl[dotenv]"
    
    # すべての機能をインストールするには
    pip install "pyxxl[all]"
  2. アプリケーションコードを記述します。

    import asyncio
    import time
    
    from pyxxl import ExecutorConfig, PyxxlRunner
    from pyxxl.ctx import g
    
    config = ExecutorConfig(
        xxl_admin_baseurl="http://xxljob-1b3fd8196eb.schedulerx.mse.aliyuncs.com/api/",
        executor_app_name="xueren-test",
        access_token="default_token",
    #    executor_listen_host="0.0.0.0",  # xxl-admin がエグゼキュータの IP アドレスに直接接続できる場合、executor_listen_host を指定する必要はありません。
    )
    
    app = PyxxlRunner(config)
    
    
    @app.register(name="demoJobHandler")
    async def test_task():
        # "g" を使用してタスクパラメーターを取得できます
        g.logger.info("get executor params: %s" % g.xxl_run_data.executorParams)
        for i in range(10):
            g.logger.warning("test logger %s" % i)
        await asyncio.sleep(5)
        return "Success..."
    
    @app.register(name="sync_func")
    def test_task4():
        # xxl-admin で実行ログを表示するには、ログ出力に g.logger を使用する必要があります。デフォルトでは、INFO レベル以上のログのみが出力されます。
        n = 1
        g.logger.info("Job %s get executor params: %s" % (g.xxl_run_data.jobId, g.xxl_run_data.executorParams))
        # 同期タスクにループが含まれている場合、キャンセル操作をサポートするには、各反復で g.cancel_event をチェックする必要があります。
        while n <= 10 and not g.cancel_event.is_set():
            # xxl-admin からログを表示する必要がない場合は、独自のロガーを使用できます。
            g.logger.info(
                "log to {} logger test_task4.{},params:{}".format(
                    g.xxl_run_data.jobId,
                    n,
                    g.xxl_run_data.executorParams,
                )
            )
            time.sleep(2)
            n += 1
        return "Success 3"
    
    
    if __name__ == "__main__":
        app.run_executor()

手動入力

エグゼキュータアドレスは手動で管理できます。アドレスは http://192.168.0.1:9999/ のフォーマットである必要があります。

  1. MSE XXL-JOB コンソールにログインします。

  2. ページの左上隅で、[リージョン] を選択します。

  3. ターゲットインスタンス ID をクリックします。左側のナビゲーションウィンドウで、[アプリケーション管理] を選択します。

  4. ターゲットアプリケーションを見つけます。[エグゼキュータ数] 列で、[接続] ボタンをクリックします。

  5. [接続タイプ][手動入力] に設定し、[エグゼキューターアドレス] を入力します。

HTTP アプリケーションをエグゼキュータに接続する

HTTP アプリケーションを接続するのに SDK は必要ありません。代わりに、ドメイン名または Kubernetes サービスを構成して、バックエンドノードを自動的に検出し、HTTP プロトコルをスケジューリングに使用できます。

Kubernetes サービスに接続する

HTTP アプリケーションが Alibaba Cloud Container Service for Kubernetes (ACK) にデプロイされている場合、Kubernetes サービスを使用して接続できます。

  1. (オプション) ACK にアプリケーションをデプロイします。次のクラスタータイプがサポートされています:

    • Terway ネットワークプラグインを備えた ACK マネージドクラスター

    • ACK Serverless クラスター

    • ACS クラスター

  2. (オプション) ACK でアプリケーションのサービスを作成します。次のサービスタイプがサポートされています:

    • ClusterIP

    • LoadBalancer

  3. MSE XXL-JOB コンソールにログインします。

  4. ページの左上隅で、[リージョン] を選択します。

  5. ターゲットインスタンス ID をクリックします。左側のナビゲーションウィンドウで、[アプリケーション管理] を選択します。

  6. ターゲットアプリケーションを見つけます。[エグゼキュータ数] 列で、[接続] ボタンをクリックします。

  7. [エグゼキュータの接続] ページで、接続タイプに [K8s サービスに接続] を選択し、パラメーター設定を完了して、[OK] をクリックして接続を完了します。

接続が確立されると、エグゼキュータ数が更新されます。数字をクリックすると、バックエンド Pod のリストを表示できます。

ドメイン名の手動入力

アプリケーションが ACK にデプロイされていない場合 (ECS インスタンス上など)、内部ドメイン名を使用して HTTP タスクをスケジュールできます。

  1. (オプション) HTTP アプリケーションのゲートウェイを作成します。内部ドメイン名が自動的に生成されます。たとえば、Network Load Balancer (NLB) を使用できます。

  2. ページの左上隅で、[リージョン] を選択します。

  3. ターゲットインスタンス ID をクリックします。左側のナビゲーションウィンドウで、[アプリケーション管理] を選択します。

  4. ターゲットアプリケーションを見つけます。[エグゼキュータ数] 列で、[接続] ボタンをクリックします。

  5. [エグゼキュータの接続] ページで、接続タイプを [ドメイン名の入力] に設定し、内部の同一リージョンエンドポイントを構成します。