You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

62 lines
1.5 KiB

  1. package main
  2. import (
  3. "bitbucket.org/mikespook/gearman-go/gearman"
  4. "bitbucket.org/mikespook/gearman-go/gearman/worker"
  5. "bitbucket.org/mikespook/golib/signal"
  6. "os"
  7. "fmt"
  8. "log"
  9. "strings"
  10. )
  11. func ToUpper(job *worker.WorkerJob) ([]byte, error) {
  12. data := []byte(strings.ToUpper(string(job.Data)))
  13. return data, nil
  14. }
  15. func main() {
  16. w := worker.New(worker.Unlimit)
  17. w.ErrFunc = func(e error) {
  18. log.Println(e)
  19. }
  20. w.AddServer("127.0.0.1:4730")
  21. w.AddFunction("ToUpper", ToUpper, 0)
  22. w.AddFunction("ToUpperTimeOut5", ToUpper, 5)
  23. // Catch the interrupt to exit the working loop.
  24. sh := signal.NewHandler()
  25. sh.Bind(os.Interrupt, func() bool {
  26. w.Close()
  27. return true
  28. })
  29. go sh.Loop()
  30. go func() {
  31. log.Println("start worker")
  32. for {
  33. print("cmd: ")
  34. var str string
  35. fmt.Scan(&str)
  36. switch str {
  37. case "echo":
  38. w.Echo([]byte("Hello world!"))
  39. var job *worker.WorkerJob
  40. for job = <-w.JobQueue; job.DataType != gearman.ECHO_RES; job = <-w.JobQueue {
  41. log.Println(job)
  42. }
  43. log.Println(string(job.Data))
  44. case "quit":
  45. os.Exit(0)
  46. return
  47. case "result":
  48. job := <-w.JobQueue
  49. log.Println(string(job.Data))
  50. default:
  51. log.Println("Unknown command")
  52. }
  53. }
  54. }()
  55. w.Work()
  56. }