noodles

package module
v0.0.0-...-31cd3ce Latest Latest
Warning

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

Go to latest
Published: Dec 6, 2018 License: MIT Imports: 9 Imported by: 0

README

Noodles

Noodles(面条)是一款超轻量级分布式任务调度类库(太轻量级了,谈不上框架),类似于python的celery,大量参考benmanns的goworker.

Noodles实现代码不到200行,能够实现goworker的核心功能,半小时读懂Noodles代码,自行定制功能。

安装

go get github.com/dean2021/noodles

引入noodles包

import "github.com/dean2021/noodles"

快速入门

添加任务


package main

import (
	"github.com/dean2021/noodles"
	"time"
	"fmt"
)

func main() {

	noodle := noodles.New(noodles.Options{
		RedisAddr:        "127.0.0.1:6379",  //redis链接地址
		RedisPass:        "",                //redis认证密码
		RedisDB:          "0",               //redis数据库
		RedisMaxActive:   10,                // 最大的激活连接数,表示同时最多有N个连接
		RedisMaxIdle:     10,                //最大的空闲连接数,表示即使没有redis连接时依然可以保持N个空闲的连接,而不被清除,随时处于待命状态
		RedisIdleTimeout: 180 * time.Second, // 最大的空闲连接等待时间,超过此时间后,空闲连接将被关闭

		NameSpace: "noodles", // 命名空间
	})

	i := 0
	for i < 100 {
		noodle.AddTask(noodles.Task{
			QueueName: "myQueue",
			FuncName:  "myFunc",
			Args: []interface{}{
				"parameter 1",
				"parameter 2",
				"parameter 3",
				"parameter 4",
				"parameter 5",
				"parameter 6",
			}},
		)
		i++
	}
	fmt.Println("完成100个任务添加.")
}

等待任务,执行任务


package main

import (
	"github.com/dean2021/noodles"
	"fmt"
	"time"
)

func main() {

	noodle := noodles.New(noodles.Options{
		RedisAddr:        "127.0.0.1:6379",  //redis链接地址
		RedisPass:        "",                //redis认证密码
		RedisDB:          "0",               //redis数据库
		RedisMaxActive:   10,                // 最大的激活连接数,表示同时最多有N个连接
		RedisMaxIdle:     10,                //最大的空闲连接数,表示即使没有redis连接时依然可以保持N个空闲的连接,而不被清除,随时处于待命状态
		RedisIdleTimeout: 180 * time.Second, // 最大的空闲连接等待时间,超过此时间后,空闲连接将被关闭

		NameSpace:   "noodles", // 命名空间
		QueueName:   "myQueue", // 队列名,个多队列逗号隔开
		Concurrency: 2,         // 并发执行数量
	})

	// 注册函数
	noodle.Register("myFunc", myFunc)

	// 监听新任务并调度执行
    err := noodle.Worker()
    if err != nil {
        fmt.Println("Error:", err)
    }
}

func myFunc(args []interface{}) error {
	fmt.Printf("call func : %v\n", args)
	time.Sleep(time.Second)
	return nil
}

noodles.Options 介绍

package noodles

import "time"

type Options struct {
	RedisAddr        string        // redis地址,例如:127.0.0.1:6379
	RedisPass        string        // redis认证密码
	RedisDB          string        // redis数据库
	RedisMaxIdle     int           // 最大的空闲连接数,表示即使没有redis连接时依然可以保持N个空闲的连接,而不被清除,随时处于待命状态
	RedisMaxActive   int           // 最大的激活连接数,表示同时最多有N个连接
	RedisIdleTimeout time.Duration // 最大的空闲连接等待时间,超过此时间后,空闲连接将被关闭

	NameSpace   string // 命名空间
	QueueName   string // 队列名,个多队列逗号隔开
	Concurrency int    // 并发执行数量
}

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	RedisClient *redis.Pool
	Log         *logger.Logger
	WorkFunc    = make(map[string]func([]interface{}) error)
)

Functions

func NewRedisPool

func NewRedisPool(options Options) *redis.Pool

Types

type Noodles

type Noodles struct {
	NameSpace   string
	QueueName   string
	Concurrency int
}

func New

func New(options Options) *Noodles

func (*Noodles) AddTask

func (n *Noodles) AddTask(task Task) error

添加任务到队列

func (*Noodles) Init

func (n *Noodles) Init(options Options) *Noodles

func (*Noodles) LogError

func (n *Noodles) LogError(error string)

func (*Noodles) Register

func (n *Noodles) Register(funcName string, function func([]interface{}) error)

注册函数

func (*Noodles) Worker

func (n *Noodles) Worker() error

读取任务并调用注册函数

type Options

type Options struct {
	RedisAddr        string        // redis地址,例如:127.0.0.1:6379
	RedisPass        string        // redis认证密码
	RedisDB          string        // redis数据库
	RedisMaxIdle     int           // 最大的空闲连接数,表示即使没有redis连接时依然可以保持N个空闲的连接,而不被清除,随时处于待命状态
	RedisMaxActive   int           // 最大的激活连接数,表示同时最多有N个连接
	RedisIdleTimeout time.Duration // 最大的空闲连接等待时间,超过此时间后,空闲连接将被关闭

	NameSpace   string // 命名空间
	QueueName   string // 队列名,个多队列逗号隔开
	Concurrency int    // 并发执行数量
}

type Task

type Task struct {
	QueueName string
	FuncName  string
	Args      []interface{}
}

Jump to

Keyboard shortcuts

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