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.
 
 
 

48 lines
1.2 KiB

  1. package main
  2. import (
  3. "os"
  4. "log"
  5. "strings"
  6. "bitbucket.org/mikespook/golib/signal"
  7. "bitbucket.org/mikespook/gearman-go/worker"
  8. )
  9. func ToUpper(job *worker.Job) ([]byte, error) {
  10. log.Printf("Handle=[%s]; UID=[%s], Data=[%s]\n",
  11. job.Handle, job.UniqueId, job.Data)
  12. data := []byte(strings.ToUpper(string(job.Data)))
  13. return data, nil
  14. }
  15. func main() {
  16. log.Println("Starting ...")
  17. defer log.Println("Shutdown complete!")
  18. w := worker.New(worker.Unlimited)
  19. defer w.Close()
  20. w.ErrHandler = func(e error) {
  21. log.Println(e)
  22. if e == worker.ErrConnection {
  23. proc, err := os.FindProcess(os.Getpid())
  24. if err != nil {
  25. log.Println(err)
  26. }
  27. if err := proc.Signal(os.Interrupt); err != nil {
  28. log.Println(err)
  29. }
  30. }
  31. }
  32. w.JobHandler = func(job *worker.Job) error {
  33. log.Printf("H=%s, UID=%s, Data=%s\n", job.Handle,
  34. job.UniqueId, job.Data)
  35. return nil
  36. }
  37. w.AddServer("127.0.0.1:4730")
  38. w.AddFunc("ToUpper", ToUpper, 0)
  39. //w.AddFunc("ToUpperTimeOut5", ToUpper, 5)
  40. go w.Work()
  41. sh := signal.NewHandler()
  42. sh.Bind(os.Interrupt, func() bool {return true})
  43. sh.Loop()
  44. }