このトピックでは、Go SDK を使用して Go アプリケーションを SchedulerX に接続する方法について説明します。
コンソールでの設定
-
「アプリケーションの作成」をご参照のうえ標準アプリケーションを作成し、「ステップ 2」に従って構成情報を確認します。
アプリケーション一覧で対象のアプリケーションを見つけ、[操作] 列の [アクセス設定] をクリックします。
[Golang] を選択して、次の接続パラメーターを取得します。
Endpoint: acm.aliyun.com, Namespace: 433d8b23-xxx-a-90d4d1b9a4af, GroupId: xxl-job-test, AppKey: b0iXMY3Bxxx+Gew==, -
Go ジョブを作成するには、「ジョブ管理」をご参照ください。
[基本設定] ステップで、[ジョブ名] を
hellogoに設定し、対象の [アプリケーション] を選択し、[ジョブタイプ] を [golang] に設定し、[タスク名] をHelloWorldに設定し、[実行モード] を [スタンドアロン] に設定し、[優先度] を [中] に設定し、必要に応じて [ジョブパラメーター] を指定します。
クライアントの統合
-
次のコマンドを実行し、タグを指定して最新バージョンの SchedulerX Go SDK をプルします。
go get github.com/alibaba/schedulerx-worker-go@{LATEST_TAG}または、次のコマンドを実行して、特定のブランチをプルすることもできます。
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!") // mock execute task 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 } -
クライアントとジョブを登録します。タスク名は、コンソールで設定した名前と一致させる必要があります。
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 {} }
クライアント設定パラメーター
|
パラメーター |
API |
説明 |
|
カスタムポート |
config.WithGrpcPort |
非スタンドアロンジョブの場合、ワーカーは相互に通信します。この通信用のポートを指定できます。ポートが指定されていない場合は、ランダムなアイドルポートが使用されます。 |
|
カスタム NIC |
config.WithIface |
マシンに複数のネットワークインターフェイスコントローラー (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 how define user behavior
}
client.RegisterTask("TestMapReduceJob", task)
select {}
}
結果の確認
-
クライアントを設定した後、アプリケーションを Alibaba Cloud にデプロイします。
MSE SchedulerX コンソールにログインします。
-
上部のナビゲーションバーで、リージョンを選択します。
-
左側のナビゲーションウィンドウで、Application Management をクリックします。
-
Application Management ページで、Total number of instances の値を確認します。
-
Total number of instances が 0 の場合、アプリケーションの接続は失敗しています。クライアントの設定を確認してください。
-
Total number of instances の値が 0 より大きい場合は、接続が成功したことを示し、接続されているインスタンスの数を表します。Actions 列で View instances をクリックすると、Connect to an instance ダイアログボックスに詳細リストが表示されます。
-
次のステップ
アプリケーションが SchedulerX に接続された後、分散型タスクスケジューリングプラットフォームでスケジューリングタスクを作成できます。詳細については、「スケジューリングタスクの作成」をご参照ください。