GoTasks

package module
v0.0.0-...-730e73b Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 7, 2015 License: GPL-2.0 Imports: 13 Imported by: 0

README

#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/
  • 增加事件机制,主要针对每个任务完成时调用

Documentation

Index

Constants

View Source
const (
	CLEAN_NONE int = iota
	CLEAN_START
	CLEAN_COMPLETE
)

Variables

This section is empty.

Functions

func Emit

func Emit(event interface{}, arguments ...interface{}) *emission.Emitter

func Exist

func Exist(path string) bool

func GetRuntimeDir

func GetRuntimeDir() string

func HttpGet

func HttpGet(url string) (string, error)

func HttpPost

func HttpPost(reqUrl string, post string) (string, error)

func Off

func Off(event, listener interface{}) *emission.Emitter

func On

func On(event, listener interface{}) *emission.Emitter

func Once

func Once(event, listener interface{}) *emission.Emitter

func Prepare

func Prepare()

func ReadFileByte

func ReadFileByte(path string) ([]byte, error)

func ReadFileStr

func ReadFileStr(path string) (string, error)

func TaskServiceStart

func TaskServiceStart()

Types

type JsonNumber

type JsonNumber struct {
	Value float64
}

type JsonString

type JsonString struct {
	Value string
}

type JsonValue

type JsonValue struct {
	Value interface{}
}

Value结构

func (*JsonValue) AsNumber

func (item *JsonValue) AsNumber() float64

尝试将JsonValue转换为一个数字类型

func (*JsonValue) AsString

func (item *JsonValue) AsString() string

尝试将JsonValue的值转换为一个字符串

func (*JsonValue) IsDefined

func (item *JsonValue) IsDefined() bool

检查值是否为null

type MainConfig

type MainConfig struct {
	TasksUrl     string
	Cycle        int
	TraceCycle   int
	LogDir       string
	LogLevel     int
	ShowComplete int
	IsTest       bool
	IsConsole    bool
	PprofPort    int
}

type Task

type Task struct {
	Name      string
	Url       string
	Cycle     int
	PostUrl   string
	Delay     int
	EventName string
}

func (*Task) GetEventName

func (task *Task) GetEventName() string

type TaskResult

type TaskResult struct {
	Id   time.Time
	Name string
	Resp string
}

type Tasks

type Tasks struct {
	Tasks []Task
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL