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 line
1.8 KiB

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