mirror of
https://github.com/hibiken/asynq.git
synced 2024-11-10 11:31:58 +08:00
golang基于redis的异步队列
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
}