57 Star 136 Fork 41

K. / GoTasks

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
README.md 4.17 KB
一键复制 编辑 原始数据 按行查看 历史

#GoTasks

呃,不用说明了吧,直接go build就可以随意玩了。

已通过编译的版本包括:go1.2.1 linux/amd64go1.4.2 windows/amd64

目前我已经持续运行了超过12个小时,15个任务,其中有2个是秒发的任务,非常稳定没有中断过。

Http任务的执行是并发的,绝不延迟,同一个任务,下一次执行不会受到上一次任务的延迟而迟滞,所以请确定接收服务器能承受住压力才好使用。

日志库用了这个https://github.com/donnie4w/go-logger,不过我修改了一些。

##如何获取代码

请使用go get指令获取代码:

go get git.oschina.net/janpoem/GoTasks

上述的指令,会将该项目所需的go-logger也下载到GOPATH的src目录中。

打开你的IDE,如IDEA或LiteIDE

创建如下的代码:

package main

import "git.oschina.net/janpoem/GoTasks"

func main() {
    GoTasks.TaskServiceStart()
}

然后编译这个项目即刻。

##启动参数

./GoTasks --help
Usage of ./GoTasks:
  -cycle=43200: 重新加载任务的周期,单位秒
  -log-dir=".": 日志输出目录
  -log-level=1: 日志输出级别
  -show-complete=0: 显示请求完成的信息
  -tasks="": 任务列表
  -trace-cycle=600: 输出心跳信息的周期,单位秒
  -test=false: 是否测试命令的参数
  -console=true: 是否在命令行输出调试
  -pprof-port=0: pprof服务器端口号,为零不启用(默认为零)

执行命令

GoTasks -tasks="http://localhost/tasks.json" -cycle=43200

##tasks.json输出格式

给一个tasks.json的清单样例:

{
	"Tasks":[
		{
			"Name":"kissOschina",
			"Url":"http://www.oschina.net/",
			"Cycle":1,
			"PostUrl":"",
			"Delay":10
		},
		{
			"Name":"kissBaidu",
			"Url":"http://www.baidu.com/",
			"Cycle":1,
			"PostUrl":"",
			"EventName":"baiduBack"
		}
	]
}
  • Name 任务名称
  • Url 要取得数据的Url
  • Cycle 获取的周期,单位秒
  • PostUrl 从Url取得的页面的内容,将他Post到另一个Url上
  • Delay 延迟启动第一次的任务,单位秒,第二次恢复正常周期时间
  • EventName 任务完成后触发的事件名称,EventName和Name只能两者取其一

##linux服务器发布

修改go_tasks.sh文件,修改13-35行部分的内容,主要填写:

  • DAEMON GoTasks执行文件所在
  • TASKS 任务URL

其它看需要修改。执行参数:

go_tasks.sh start    # 启动
go_tasks.sh stop     # 停止
go_tasks.sh restart  # 重启
go_tasks.sh status   # 查看状态
go_tasks.sh proc     # 查看具体的进程

目前限定单进程执行,如果要跑多个进程,最好将复制多一套执行文件和启动脚本,然后就可以多个进程了。

##新增事件接口

以上述的tasks.json为例,目前提供了两个事件的入口:

package main

import (
	"git.oschina.net/janpoem/GoTasks"
	"git.oschina.net/janpoem/go-logger"
)

func main() {
    defer GoTasks.TaskServiceStart()
    // 针对Url请求的返回
    GoTasks.On("get:kissOschina", func(resp string) {
        fmt.Println(resp.Name) // 输出kissOschina
    })
    // 如果PostUrl不为空,则在完成PostUrl请求以后,会触发这个事件
    GoTasks.On("get:baiduBack", func(resp string) {
    
	})
}

##修改日志

2015-05-04

  • 将Prepare函数改为可被外部调用的函数,并且限制Prepare只能被执行一次
  • Task增加Delay,Delay用于延迟第一次执行任务的触发时间,用于降低全部任务启动第一次的并发压力,单位为秒,第二次执行任务就不会Delay了。
  • Task增加EventName,用于定义任务完成时,触发执行的任务,EventName和Name只能选其一。
  • TaskResult增加Name,用于获取当前执行的任务的名称。

2015-03-26

  • 将logger的代码移出核心代码
  • 调整一下代码的结构
  • 增加pprof服务器,可以监控内存和goroutine的情况,监控的入口是:http://localhost:端口号/debug/pprof/
  • 增加事件机制,主要针对每个任务完成时调用
Go
1
https://gitee.com/janpoem/GoTasks.git
git@gitee.com:janpoem/GoTasks.git
janpoem
GoTasks
GoTasks
master

搜索帮助