package main import ( "bitbucket.org/mikespook/gearman-go/gearman" "bitbucket.org/mikespook/gearman-go/gearman/worker" "bitbucket.org/mikespook/golib/signal" "os" "fmt" "log" "strings" ) func ToUpper(job *worker.WorkerJob) ([]byte, error) { data := []byte(strings.ToUpper(string(job.Data))) return data, nil } func main() { w := worker.New(worker.Unlimit) w.ErrFunc = func(e error) { log.Println(e) } w.AddServer("127.0.0.1:4730") w.AddFunction("ToUpper", ToUpper, 0) w.AddFunction("ToUpperTimeOut5", ToUpper, 5) // Catch the interrupt to exit the working loop. sh := signal.NewHandler() sh.Bind(os.Interrupt, func() bool { w.Close() return true }) go sh.Loop() go func() { log.Println("start worker") for { print("cmd: ") var str string fmt.Scan(&str) switch str { case "echo": w.Echo([]byte("Hello world!")) var job *worker.WorkerJob for job = <-w.JobQueue; job.DataType != gearman.ECHO_RES; job = <-w.JobQueue { log.Println(job) } log.Println(string(job.Data)) case "quit": os.Exit(0) return case "result": job := <-w.JobQueue log.Println(string(job.Data)) default: log.Println("Unknown command") } } }() w.Work() }