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.
 
 
 

58 lines
1.2 KiB

  1. package worker_test
  2. import (
  3. "fmt"
  4. "github.com/mikespook/gearman-go/worker"
  5. "sync"
  6. )
  7. func ExampleWorker() {
  8. // An example of worker
  9. w := worker.New(worker.Unlimited)
  10. defer w.Close()
  11. // Add a gearman job server
  12. if err := w.AddServer(worker.Network, "127.0.0.1:4730"); err != nil {
  13. fmt.Println(err)
  14. return
  15. }
  16. // A function for handling jobs
  17. foobar := func(job worker.Job) ([]byte, error) {
  18. // Do nothing here
  19. return nil, nil
  20. }
  21. // Add the function to worker
  22. if err := w.AddFunc("foobar", foobar, 0); err != nil {
  23. fmt.Println(err)
  24. return
  25. }
  26. var wg sync.WaitGroup
  27. // A custome handler, for handling other results, eg. ECHO, dtError.
  28. w.JobHandler = func(job worker.Job) error {
  29. if job.Err() == nil {
  30. fmt.Println(string(job.Data()))
  31. } else {
  32. fmt.Println(job.Err())
  33. }
  34. wg.Done()
  35. return nil
  36. }
  37. // An error handler for handling worker's internal errors.
  38. w.ErrorHandler = func(e error) {
  39. fmt.Println(e)
  40. // Ignore the error or shutdown the worker
  41. }
  42. // Tell Gearman job server: I'm ready!
  43. if err := w.Ready(); err != nil {
  44. fmt.Println(err)
  45. return
  46. }
  47. // Running main loop
  48. go w.Work()
  49. wg.Add(1)
  50. // calling Echo
  51. w.Echo([]byte("Hello"))
  52. // Waiting results
  53. wg.Wait()
  54. // Output: Hello
  55. }