简介
随着近几年云原生技术特别是Kubernetes的兴起,Go语言越来越流行。Go语言以其简洁、高性能(默认支持协程)得到了很多开发者的认可。
SchedulerX是阿里云的分布式任务调度服务,之前支持Java SDK,Agent,kubernetes等接入方式,本次新增支持Go SDK接入。
功能
当前版本只支持单机执行。广播任务、MapReduce等分布式模型后续支持。
由于Go使用协程运行任务,所以不支持停止任务。
接入步骤
控制台接入
- 登录SchedulerX,创建一个普通应用,然后点接入配置,会返回客户端需要的配置信息
Endpoint=xxxx Namespace=xxxx GroupId=xxx AppKey=xxx
- 创建一个golang类型任务
客户端接入
- 拉取Go版本SDK
go get github.com/alibaba/schedulerx-worker-go@{最新的tag}
- 实现Processor接口,编写业务代码
typeProcessorinterface { Process(ctx*processor.JobContext) (*ProcessResult, error) }
举个例子
packagemainimport ( "fmt""github.com/alibaba/schedulerx-worker-go/processor""github.com/alibaba/schedulerx-worker-go/processor/jobcontext""time") var_processor.Processor=&HelloWorld{} typeHelloWorldstruct{} func (h*HelloWorld) Process(ctx*jobcontext.JobContext) (*processor.ProcessResult, error) { fmt.Println("[Process] Start process my task: Hello world!") // mock execute tasktime.Sleep(3*time.Second) ret :=new(processor.ProcessResult) ret.SetStatus(processor.InstanceStatusSucceed) fmt.Println("[Process] End process my task: Hello world!") returnret, nil}
- 注册client和job,任务名称要和控制台保持一致
packagemainimport ( "github.com/alibaba/schedulerx-worker-go") funcmain() { // This is just an example, the real configuration needs to be obtained from the platformcfg :=&schedulerx.Config{ Endpoint: "acm.aliyun.com", Namespace: "433d8b23-xxx-xxx-xxx-90d4d1b9a4af", GroupId: "xueren_sub", AppKey: "xxxxxx", } client, err :=schedulerx.GetClient(cfg) iferr!=nil { panic(err) } task :=&HelloWorld{} // 给你的任务取一个名字,并注册到client中,要和控制台保持一致client.RegisterTask("HelloWorld", task) select {} }