有两个 API 接口,/v1/run
和 /v1/stop
。
任务是多个的,根据 id 区分。
调用 /v1/run?id=1
任务 1 就会开始运行并处于运行状态。
因为任务是定期持续运行的类型,所以任务可能要用类似 gocron 之类的库,或者有个好的选择。
再调用 /v1/stop?id=1
就会停止。
还有就是 /v1/status?id=1
就能查看运行状态。
要如何实现呢?
1
liangjx 2019-08-07 16:42:31 +08:00
设置一个信号量,stop 修改信号量
|
2
ManjusakaL 2019-08-07 17:41:21 +08:00
最好依靠专门的队列来做吧。。
|
3
thet 2019-08-07 17:49:14 +08:00 via Android
跟 gin 无关,要看接口里面的 handler 怎么实现,任务跑在哪的
|
4
labulaka521 2019-08-07 18:16:10 +08:00 via Android
暂停任务可以使用 context
|
5
karllynn 2019-08-07 19:58:42 +08:00
这跟 gin 有啥关系…
|
7
reus 2019-08-07 20:08:47 +08:00 2
这和 gin 没有关系,你不用 gin 不会实现的话,用 gin 你也一样不会实现
|
8
yiyi11 2019-08-07 20:32:06 +08:00 via Android
你需要一个监听器。
|
10
a7a2a7a2 2019-08-07 21:27:59 +08:00
4 楼说对了,早两年就有出了外部控制协程的官方库了,context
|
11
Hanggi OP |
12
labulaka521 2019-08-07 22:23:11 +08:00
@Hanggi 可以这样做 任务运行的时候穿进去 ctx 然后保存这个 ctx 对应的 cancelFunc 和任务名称保存在一个 map 中 map 是全局变量,然后停止的时候从 map 中取出任务对应的 cancelFunc 执行就可以了
|
13
Hanggi OP @labulaka521 谢谢,要的就是这个。
|
14
clearT 2019-08-07 23:22:34 +08:00 via iPhone
|
15
Mark3K 2019-08-08 00:39:38 +08:00
这 API 设计的很有趣,跟函数名有异曲同工之妙
|
16
Mitt 2019-08-08 02:30:34 +08:00 via iPhone
这确实跟 gin 没关系,你的问题其实应该是如何持久化存储状态
|