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


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

クライアントアクセス
次のコマンドを実行して、最新のタグを使用して 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}サービスコードを記述して、
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 }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 {}
}結果の確認
アプリケーションを Alibaba Cloud に発行します。
SchedulerX コンソールにログインします。
上部のナビゲーションバーで、リージョンを選択します。
左側のナビゲーションウィンドウで、[Application Management] をクリックします。
[Application Management] ページで、エグゼキュータの総数を確認します。
エグゼキュータの総数が 0 の場合、アプリケーションの接続は失敗しています。アプリケーションを確認し、修正してください。
エグゼキュータの総数が 0 でない場合、アプリケーションは正常に接続されています。
次のステップ
アプリケーションが SchedulerX に接続された後、SchedulerX コンソールでジョブを作成できます。詳細については、「ジョブ管理」トピックの「ジョブの作成」セクションをご参照ください。