mirror of
https://github.com/hibiken/asynq.git
synced 2024-12-24 23:02:18 +08:00
golang基于redis的异步队列
989b2b6d55
Wait for a certain amount of time to allow for worker goroutines to finish. If the goroutines don't finish with the timeout duration, processor will quit the goroutines and restore any unfinished tasks from the in_progress queue back to the default queue. |
||
---|---|---|
internal/rdb | ||
tools/asynqmon | ||
.gitignore | ||
.travis.yml | ||
asynq_test.go | ||
asynq.go | ||
background_test.go | ||
background.go | ||
client_test.go | ||
client.go | ||
doc.go | ||
go.mod | ||
go.sum | ||
LICENSE | ||
poller_test.go | ||
poller.go | ||
processor_test.go | ||
processor.go | ||
README.md |
Asynq
Asynq is a simple asynchronous task queue library in Go.
Requirements
- Redis: 2.6+
- Go: 1.12+
Installation
go get -u github.com/hibiken/asynq
Getting Started
- Import
asynq
in your file.
import "github.com/hibiken/asynq"
- Create a
Client
instance to create tasks.
func main() {
client := asynq.NewClient(&asynq.RedisOpt{
Addr: "localhost:6379",
})
t1 := &asynq.Task{
Type: "send_welcome_email",
Payload: map[string]interface{}{
"recipient_id": 1234,
},
}
t2 := &asynq.Task{
Type: "send_reminder_email",
Payload: map[string]interface{}{
"recipient_id": 1234,
},
}
// process the task immediately.
client.Process(t1, time.Now())
// process the task 24 hours later.
client.Process(t2, time.Now().Add(24 * time.Hour))
}
- Create a
Background
instance to process tasks.
func main() {
bg := asynq.NewBackground(10, &asynq.RedisOpt{
Addr: "localhost:6379",
})
bg.Run(asynq.HandlerFunc(handler))
}
// if handler returns an error or panics, the task will be retried after some delay.
func handler(t *asynq.Task) error {
switch t.Type {
case "send_welcome_email":
rid, ok := t.Payload["recipient_id"]
if !ok {
return fmt.Errorf("recipient_id not found in payload")
}
fmt.Printf("Send Welcome Email to %d\n", rid.(int))
// ... handle other task types.
default:
return fmt.Errorf("unexpected task type: %s", t.Type)
}
return nil
}