ecodeclub / ecron

大规模分布式任务调度系统(学习版)
Apache License 2.0
63 stars 21 forks source link

客户端:http 客户端 #28

Open flycash opened 1 week ago

flycash commented 1 week ago

在我们的设计里面,调度节点可以通过 HTTP 调用触发任务。那么如果我们要求用户自己手写 HTTP 接口也是可以的。但是很多用户可能会比较不耐烦,所以我们进一步提供客户端。

这个客户端提供以下接口:

你需要提供的基本实现是:

type Registry struct {
    Registry(t Task)
}
// 允许用户指定路径,比如说有些用户用 /task/$name
// 有些用户使用 /aaa/bbb/ccc/$name
// name 就是某个任务的名字
type HttpClient struct {
   Registry
// 这个是返回一个 mutex,这样的话用户可以拿去自己启动,决定监听的端口
// mutex := client.HttpMutex()
// http.ListenAndServe(":8080", mutex)
    HttpMutex() http.Mutex
}

type Task interface {
    Execute()
    Stop()
    Status()
    Name()
}
flycash commented 1 week ago

task 接口是给用户用的,他们提供实现

flycash commented 1 week ago

Mutex 里面注册 POST,GET 和 DELETE 三个路由。不能使用 GIN 之类的接口。

flycash commented 1 week ago

在根目录下新建一个 client 的包,项目结构是: ecron/client/http

Jared-lu commented 1 week ago

大体上是不是这样子? ` // 我的实现 type Registry struct { tasks []Task }

func (s *Registry) Register(t Task) { s.tasks = append(s.tasks, t) }

type Client struct { Registry prefix string }

func (c Client) HttpMutex() http.Handler { handler := http.NewServeMux() handler.HandleFunc("/$prefix/$TaskName", func(w http.ResponseWriter, r http.Request) { // Post => t.Execute() // GET => t.Status() // DELETE => Stop() }) return handler }

// 用户使用 r:=new(Registry) r.Register(t) client:=NewHttpClient(r) mutex:=client.HttpMutex() http.ListenAndServe(":8080", mutex) `

flycash commented 1 week ago