mirror of
https://github.com/hibiken/asynq.git
synced 2024-12-25 07:12:17 +08:00
Add Config type to configure background processing behavior
This commit is contained in:
parent
fc71857c7c
commit
9af14d9a6d
@ -90,7 +90,9 @@ func main() {
|
|||||||
r := redis.NewClient(&redis.Options{
|
r := redis.NewClient(&redis.Options{
|
||||||
Addr: "localhost:6379",
|
Addr: "localhost:6379",
|
||||||
}
|
}
|
||||||
bg := asynq.NewBackground(r, 10)
|
bg := asynq.NewBackground(r, &asynq.Config{
|
||||||
|
Concurrency: 20,
|
||||||
|
})
|
||||||
|
|
||||||
// Blocks until signal TERM or INT is received.
|
// Blocks until signal TERM or INT is received.
|
||||||
// For graceful shutdown, send signal TSTP to stop processing more tasks
|
// For graceful shutdown, send signal TSTP to stop processing more tasks
|
||||||
@ -136,7 +138,9 @@ func main() {
|
|||||||
r := redis.NewClient(&redis.Options{
|
r := redis.NewClient(&redis.Options{
|
||||||
Addr: "localhost:6379",
|
Addr: "localhost:6379",
|
||||||
}
|
}
|
||||||
bg := asynq.NewBackground(r, 10)
|
bg := asynq.NewBackground(r, &asynq.Config{
|
||||||
|
Concurrency: 20,
|
||||||
|
})
|
||||||
|
|
||||||
// Use asynq.HandlerFunc adapter for a handler function
|
// Use asynq.HandlerFunc adapter for a handler function
|
||||||
bg.Run(asynq.HandlerFunc(handler))
|
bg.Run(asynq.HandlerFunc(handler))
|
||||||
|
@ -33,12 +33,29 @@ type Background struct {
|
|||||||
processor *processor
|
processor *processor
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewBackground returns a new Background with the specified number of workers
|
// Config specifies the background-task processing behavior.
|
||||||
// given a redis configuration .
|
type Config struct {
|
||||||
func NewBackground(r *redis.Client, numWorkers int) *Background {
|
// Max number of concurrent workers to process tasks.
|
||||||
|
//
|
||||||
|
// If set to zero or negative value, NewBackground will overwrite the value to one.
|
||||||
|
Concurrency int
|
||||||
|
|
||||||
|
// TODO(hibiken): Add ShutdownTimeout
|
||||||
|
// ShutdownTimeout time.Duration
|
||||||
|
|
||||||
|
// TODO(hibiken): Add RetryDelayFunc
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewBackground returns a new Background instance given a redis client
|
||||||
|
// and background processing configuration.
|
||||||
|
func NewBackground(r *redis.Client, cfg *Config) *Background {
|
||||||
|
n := cfg.Concurrency
|
||||||
|
if n < 1 {
|
||||||
|
n = 1
|
||||||
|
}
|
||||||
rdb := rdb.NewRDB(r)
|
rdb := rdb.NewRDB(r)
|
||||||
scheduler := newScheduler(rdb, 5*time.Second)
|
scheduler := newScheduler(rdb, 5*time.Second)
|
||||||
processor := newProcessor(rdb, numWorkers, nil)
|
processor := newProcessor(rdb, n, nil)
|
||||||
return &Background{
|
return &Background{
|
||||||
rdb: rdb,
|
rdb: rdb,
|
||||||
scheduler: scheduler,
|
scheduler: scheduler,
|
||||||
|
@ -18,7 +18,9 @@ func TestBackground(t *testing.T) {
|
|||||||
DB: 15,
|
DB: 15,
|
||||||
})
|
})
|
||||||
client := NewClient(r)
|
client := NewClient(r)
|
||||||
bg := NewBackground(r, 10)
|
bg := NewBackground(r, &Config{
|
||||||
|
Concurrency: 10,
|
||||||
|
})
|
||||||
|
|
||||||
// no-op handler
|
// no-op handler
|
||||||
h := func(task *Task) error {
|
h := func(task *Task) error {
|
||||||
|
@ -25,7 +25,7 @@ func NewClient(r *redis.Client) *Client {
|
|||||||
return &Client{rdb}
|
return &Client{rdb}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Option configures the behavior of task processing.
|
// Option specifies the processing behavior for the associated task.
|
||||||
type Option interface{}
|
type Option interface{}
|
||||||
|
|
||||||
// max number of times a task will be retried.
|
// max number of times a task will be retried.
|
||||||
|
8
doc.go
8
doc.go
@ -3,9 +3,7 @@ Package asynq provides a framework for background task processing.
|
|||||||
|
|
||||||
The Client is used to register a task to be processed at the specified time.
|
The Client is used to register a task to be processed at the specified time.
|
||||||
|
|
||||||
client := asynq.NewClient(&asynq.RedisConfig{
|
client := asynq.NewClient(redis)
|
||||||
Addr: "localhost:6379",
|
|
||||||
})
|
|
||||||
|
|
||||||
t := &asynq.Task{
|
t := &asynq.Task{
|
||||||
Type: "send_email",
|
Type: "send_email",
|
||||||
@ -16,8 +14,8 @@ The Client is used to register a task to be processed at the specified time.
|
|||||||
|
|
||||||
The Background is used to run the background processing with a given
|
The Background is used to run the background processing with a given
|
||||||
handler with the specified number of workers.
|
handler with the specified number of workers.
|
||||||
bg := asynq.NewBackground(20, &asynq.RedisConfig{
|
bg := asynq.NewBackground(redis, &asynq.Config{
|
||||||
Addr: "localhost:6379",
|
Concurrency: 20,
|
||||||
})
|
})
|
||||||
|
|
||||||
bg.Run(handler)
|
bg.Run(handler)
|
||||||
|
Loading…
Reference in New Issue
Block a user