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 (w *Worker) Agents() int
- func (worker *Worker) Close()
- func (worker *Worker) Echo(data []byte)
- func (worker *Worker) Ready() (err error)
- func (worker *Worker) Reconnect() error
- func (worker *Worker) RemoveFunc(funcname string) (err error)
- func (worker *Worker) Reset()
- func (w *Worker) Running() (string, int)
- func (worker *Worker) SetId(id string)
- func (worker *Worker) Shutdown()
- func (worker *Worker) Work()
- type WorkerDisconnectError
Examples ¶
Constants ¶
const ( Unlimited = iota OneByOne )
Variables ¶
Functions ¶
Types ¶
type Job ¶
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"
"sync"
rt "github.com/appscode/g2/pkg/runtime"
"github.com/appscode/g2/worker"
)
func main() {
// An example of worker
w := worker.New(worker.Unlimited)
defer w.Close()
// Add a gearman job server
if err := w.AddServer(rt.Network, "127.0.0.1:4730"); err != nil {
fmt.Println(err)
return
}
// A function for handling jobs
foobar := func(job worker.Job) ([]byte, error) {
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 assigned to OneByOne(=1), there will be only one job executed in a time.
func (*Worker) AddFunc ¶
Add a function. Set timeout as Unlimited(=0) to disable executing timeout.
func (*Worker) Ready ¶
Connect to Gearman server and tell every server what can this worker do.
func (*Worker) RemoveFunc ¶
Remove a function.
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?
Source Files
¶
- agent.go
- error.go
- func.go
- inpack.go
- job.go
- metrics.go
- outpack.go
- worker.go