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

SchedulerX:SDK for Golang を使用した Golang アプリケーションの SchedulerX への接続

最終更新日:Dec 06, 2025

このトピックでは、SDK for Golang を使用して Golang アプリケーションを SchedulerX に接続する方法について説明します。

操作手順

  1. 汎用アプリケーションを作成し、構成をクエリします。詳細については、「アプリケーション管理」トピックの「アプリケーションの作成」セクションおよび「オンプレミス環境からインターネット経由で SchedulerX に接続する」トピックの「ステップ 2」セクションをご参照ください。

    image.png

    image.png

  2. Golang ジョブを作成します。詳細については、「ジョブ管理」をご参照ください。

    image.png

クライアントアクセス

  1. 次のコマンドを実行して、最新のタグを使用して SchedulerX SDK for Go を取得します。

    go get github.com/alibaba/schedulerx-worker-go@{Latest tag}

    または、次のコマンドを実行して、SDK for Golang のブランチパッケージとその依存関係を取得します。

    go get github.com/alibaba/schedulerx-worker-go@{Branch name}
  2. サービスコードを記述して、Processor インターフェイスを実装します。

    type Processor interface {
        Process(ctx *processor.JobContext) (*ProcessResult, error)
    }

    サンプルコード:

    package main
    
    import (
    	"fmt"
    	"github.com/alibaba/schedulerx-worker-go/processor"
    	"github.com/alibaba/schedulerx-worker-go/processor/jobcontext"
    	"time"
    )
    
    var _ processor.Processor = &HelloWorld{}
    
    type HelloWorld struct{}
    
    func (h *HelloWorld) Process(ctx *jobcontext.JobContext) (*processor.ProcessResult, error) {
    	fmt.Println("[Process] Start process my task: Hello world!")
    	// タスクの実行をモックします
    	time.Sleep(3 * time.Second)
    	ret := new(processor.ProcessResult)
    	ret.SetStatus(processor.InstanceStatusSucceed)
    	fmt.Println("[Process] End process my task: Hello world!")
    	return ret, nil
    }
    
  3. Golang ジョブをクライアントに登録します。ジョブ名は、コンソールで指定したものと同じである必要があります。

    package main
    
    import (
    	"github.com/alibaba/schedulerx-worker-go"
    )
    
    func main() {
    	// これは単なる例です。実際の構成はプラットフォームから取得する必要があります
    	cfg := &schedulerx.Config{
    		Endpoint:  "acm.aliyun.com",
    		Namespace: "433d8b23-xxx-xxx-xxx-90d4d1b9a4af",
    		GroupId:   "xueren_sub",
    		AppKey:    "xxxxxx",
    	}
    	client, err := schedulerx.GetClient(cfg)
    	if err != nil {
    		panic(err)
    	}
    	task := &HelloWorld{}
    
    	// ジョブに名前を付けてクライアントに登録します。ジョブ名は、コンソールで指定したものと同じである必要があります。
    	client.RegisterTask("HelloWorld", task)
    	select {}
    }
    

クライアントパラメーター

パラメーター

操作

説明

カスタムポート

config.WithGrpcPort

複数のワーカーで実行される非スタンドアロンジョブは、相互接続する必要があります。ジョブを相互接続するには、ポートを指定する必要があります。ポートを指定しない場合、システムはランダムに空きポートを選択します。

カスタム NIC

config.WithIface

ワーカーに複数のネットワークインターフェースコントローラー (NIC) があり、特定の NIC を使用する場合は、NIC のカスタム名を指定してその IP アドレスを取得できます。

カスタムタグ

config.WithLabel

クライアントにタグを追加し、特定のタグに基づいてジョブスケジューリングを構成できます。タグは、カナリアリリースやテストシナリオに適しています。

サンプルコード:

func main() {
    // これは単なる例です。実際の構成はプラットフォームから取得する必要があります
    cfg := &schedulerx.Config{
        Endpoint:  "acm.aliyun.com",
        Namespace: "fa6ed99e-xxxxxx-a2bf1659d039",
        GroupId:   "xueren_test_sub",
        AppKey:    "myV5K5Xaf1kxxxxxxxx",
    }
    client, err := schedulerx.GetClient(cfg, schedulerx.WithWorkerConfig(config.NewWorkerConfig(
        config.WithGrpcPort(8001),
        config.WithIface("eth0")))),
        config.WithLabel("test")
    if err != nil {
        panic(err)
    }

    // ここで登録された名前 TestMapReduceJob は、プラットフォームで構成されたものと一致する必要があります
    task := &TestMapReduceJob{
        mapjob.NewMapReduceJobProcessor(), // FIXME ユーザーの動作を定義する方法
    }
    client.RegisterTask("TestMapReduceJob", task)
    select {}
}

結果の確認

  1. アプリケーションを Alibaba Cloud に発行します。

  2. SchedulerX コンソールにログインします。

  3. 上部のナビゲーションバーで、リージョンを選択します。

  4. 左側のナビゲーションウィンドウで、[Application Management] をクリックします。

  5. [Application Management] ページで、エグゼキュータの総数を確認します。

    • エグゼキュータの総数が 0 の場合、アプリケーションの接続は失敗しています。アプリケーションを確認し、修正してください。

    • エグゼキュータの総数が 0 でない場合、アプリケーションは正常に接続されています。

次のステップ

アプリケーションが SchedulerX に接続された後、SchedulerX コンソールでジョブを作成できます。詳細については、「ジョブ管理」トピックの「ジョブの作成」セクションをご参照ください。

関連ドキュメント

Golang ジョブ