gearman-go/example/worker.go

62 line
1.8 KiB
Go

2011-05-18 20:24:59 +08:00
package main
import (
"os"
"log"
2012-08-30 17:56:10 +08:00
"time"
"strings"
2012-12-21 11:11:37 +08:00
"github.com/mikespook/golib/signal"
"github.com/mikespook/gearman-go/worker"
2011-05-18 20:24:59 +08:00
)
func ToUpper(job *worker.Job) ([]byte, error) {
2012-08-30 17:56:10 +08:00
log.Printf("ToUpper: Handle=[%s]; UID=[%s], Data=[%s]\n",
job.Handle, job.UniqueId, job.Data)
data := []byte(strings.ToUpper(string(job.Data)))
return data, nil
2011-05-18 20:24:59 +08:00
}
2012-08-30 17:56:10 +08:00
func ToUpperDelay10(job *worker.Job) ([]byte, error) {
log.Printf("ToUpperDelay10: Handle=[%s]; UID=[%s], Data=[%s]\n",
job.Handle, job.UniqueId, job.Data)
time.Sleep(10 * time.Second)
data := []byte(strings.ToUpper(string(job.Data)))
return data, nil
}
2011-05-18 20:24:59 +08:00
func main() {
log.Println("Starting ...")
defer log.Println("Shutdown complete!")
w := worker.New(worker.Unlimited)
2012-05-28 10:34:16 +08:00
defer w.Close()
w.ErrHandler = func(e error) {
log.Println(e)
2012-06-01 14:28:10 +08:00
if e == worker.ErrConnection {
proc, err := os.FindProcess(os.Getpid())
if err != nil {
log.Println(err)
}
if err := proc.Signal(os.Interrupt); err != nil {
log.Println(err)
}
}
}
w.JobHandler = func(job *worker.Job) error {
log.Printf("H=%s, UID=%s, Data=%s, DataType=%d\n", job.Handle,
job.UniqueId, job.Data, job.DataType)
return nil
}
w.AddServer("127.0.0.1:4730")
w.AddFunc("ToUpper", ToUpper, worker.Immediately)
2012-08-30 17:56:10 +08:00
w.AddFunc("ToUpperTimeOut5", ToUpperDelay10, 5)
w.AddFunc("ToUpperTimeOut20", ToUpperDelay10, 20)
2012-09-25 15:16:17 +08:00
w.AddFunc("SysInfo", worker.SysInfo, worker.Immediately)
w.AddFunc("MemInfo", worker.MemInfo, worker.Immediately)
go w.Work()
sh := signal.NewHandler()
sh.Bind(os.Interrupt, func() bool {return true})
sh.Loop()
2011-05-18 20:24:59 +08:00
}