Documentation ¶
Overview ¶
The worker package helps developers to develop Gearman's worker in an easy way.
Index ¶
- Constants
- Variables
- func MemInfo(job Job) ([]byte, error)
- func SysInfo(job Job) ([]byte, error)
- type ErrorHandler
- type Job
- type JobFunc
- type JobHandler
- type Worker
- func (worker *Worker) AddFunc(funcname string, f JobFunc, timeout uint32) (err error)
- func (worker *Worker) AddServer(net, addr string) (err error)
- func (worker *Worker) Close()
- func (worker *Worker) Echo(data []byte)
- func (worker *Worker) Ready() (err error)
- func (worker *Worker) RemoveFunc(funcname string) (err error)
- func (worker *Worker) Reset()
- func (worker *Worker) SetId(id string)
- func (worker *Worker) Shutdown()
- func (worker *Worker) Work()
- type WorkerDisconnectError
Examples ¶
Constants ¶
const ( Unlimited = iota OneByOne )
const (
Network = "tcp"
)
Variables ¶
Functions ¶
Types ¶
type Worker ¶
type Worker struct { sync.Mutex Id string ErrorHandler ErrorHandler JobHandler JobHandler // contains filtered or unexported fields }
Worker is the only structure needed by worker side developing. It can connect to multi-server and grab jobs.
Example ¶
package main import ( "fmt" "github.com/mikespook/gearman-go/worker" "sync" ) func main() { // An example of worker w := worker.New(worker.Unlimited) defer w.Close() // Add a gearman job server if err := w.AddServer(worker.Network, "127.0.0.1:4730"); err != nil { fmt.Println(err) return } // A function for handling jobs foobar := func(job worker.Job) ([]byte, error) { // Do nothing here return nil, nil } // Add the function to worker if err := w.AddFunc("foobar", foobar, 0); err != nil { fmt.Println(err) return } var wg sync.WaitGroup // A custome handler, for handling other results, eg. ECHO, dtError. w.JobHandler = func(job worker.Job) error { if job.Err() == nil { fmt.Println(string(job.Data())) } else { fmt.Println(job.Err()) } wg.Done() return nil } // An error handler for handling worker's internal errors. w.ErrorHandler = func(e error) { fmt.Println(e) // Ignore the error or shutdown the worker } // Tell Gearman job server: I'm ready! if err := w.Ready(); err != nil { fmt.Println(err) return } // Running main loop go w.Work() wg.Add(1) // calling Echo w.Echo([]byte("Hello")) // Waiting results wg.Wait() }
Output: Hello
func New ¶
Return a worker.
If limit is set to Unlimited(=0), the worker will grab all jobs and execute them parallelly. If limit is greater than zero, the number of paralled executing jobs are limited under the number. If limit is assgined to OneByOne(=1), there will be only one job executed in a time.
func (*Worker) RemoveFunc ¶
Remove a function.
func (*Worker) Reset ¶
func (worker *Worker) Reset()
Remove all of functions. Both from the worker and job servers.
type WorkerDisconnectError ¶
type WorkerDisconnectError struct {
// contains filtered or unexported fields
}
Error type passed when a worker connection disconnects
func (*WorkerDisconnectError) Error ¶
func (e *WorkerDisconnectError) Error() string
func (*WorkerDisconnectError) Reconnect ¶
func (e *WorkerDisconnectError) Reconnect() (err error)
Responds to the error by asking the worker to reconnect
func (*WorkerDisconnectError) Server ¶
func (e *WorkerDisconnectError) Server() (net string, addr string)
Which server was this for?