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.
 
 
 

61 lines
1.4 KiB

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