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.

worker.go 1.4 KiB

10 vuotta sitten
10 vuotta sitten
10 vuotta sitten
10 vuotta sitten
10 vuotta sitten
10 vuotta sitten
10 vuotta sitten
10 vuotta sitten
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  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.ErrLostConn {
  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. }