2
0
mirror of https://github.com/hibiken/asynq.git synced 2024-11-10 11:31:58 +08:00
asynq/doc.go

64 lines
1.8 KiB
Go
Raw Normal View History

2020-01-03 10:13:16 +08:00
// Copyright 2020 Kentaro Hibino. All rights reserved.
// Use of this source code is governed by a MIT license
// that can be found in the LICENSE file.
2019-12-06 22:12:44 +08:00
/*
2020-01-23 22:33:34 +08:00
Package asynq provides a framework for asynchronous task processing.
2019-12-06 22:12:44 +08:00
Asynq uses Redis as a message broker. To connect to redis server,
specify the options using one of RedisConnOpt types.
redis = &asynq.RedisClientOpt{
Addr: "127.0.0.1:6379",
Password: "xxxxx",
DB: 3,
}
2019-12-06 22:12:44 +08:00
The Client is used to register a task to be processed at the specified time.
Task is created with two parameters: its type and payload.
client := asynq.NewClient(redis)
2019-12-06 22:12:44 +08:00
t := asynq.NewTask(
"send_email",
map[string]interface{}{"user_id": 42})
2019-12-06 22:12:44 +08:00
// Enqueue the task to be processed immediately.
err := client.Enqueue(t)
// Schedule the task to be processed in one minute.
err = client.EnqueueIn(time.Minute, t)
2019-12-06 22:12:44 +08:00
2020-01-03 11:47:04 +08:00
The Background is used to run the background task processing with a given
handler.
bg := asynq.NewBackground(redis, &asynq.Config{
2020-01-03 11:47:04 +08:00
Concurrency: 10,
2019-12-06 22:12:44 +08:00
})
bg.Run(handler)
2020-01-03 11:47:04 +08:00
Handler is an interface with one method ProcessTask which
takes a task and returns an error. Handler should return nil if
the processing is successful, otherwise return a non-nil error.
If handler panics or returns a non-nil error, the task will be retried in the future.
2019-12-06 22:12:44 +08:00
2020-01-03 11:47:04 +08:00
Example of a type that implements the Handler interface.
2019-12-06 22:12:44 +08:00
type TaskHandler struct {
// ...
}
2020-02-12 13:59:46 +08:00
func (h *TaskHandler) ProcessTask(ctx context.Context, task *asynq.Task) error {
2019-12-06 22:12:44 +08:00
switch task.Type {
case "send_email":
2020-01-03 11:47:04 +08:00
id, err := task.Payload.GetInt("user_id")
// send email
2019-12-06 22:12:44 +08:00
//...
default:
return fmt.Errorf("unexpected task type %q", task.Type)
2019-12-06 22:12:44 +08:00
}
return nil
}
*/
package asynq