2
0
mirror of https://github.com/hibiken/asynq.git synced 2024-11-14 11:31:18 +08:00

[ci skip] Update readme

- Added flow chart for task queue
- Reordered sections
This commit is contained in:
Ken Hibino 2020-03-02 06:40:53 -08:00
parent b6486716b4
commit b9e3cad7a7
2 changed files with 37 additions and 34 deletions

View File

@ -12,15 +12,7 @@ It is backed by Redis and it is designed to have a low barrier to entry. It shou
**Important Note**: Current major version is zero (v0.x.x) to accomodate rapid development and fast iteration while getting early feedback from users. The public API could change without a major version update before v1.0.0 release. **Important Note**: Current major version is zero (v0.x.x) to accomodate rapid development and fast iteration while getting early feedback from users. The public API could change without a major version update before v1.0.0 release.
![Gif](/docs/assets/demo.gif) ![Task Queue Diagram](/docs/assets/task-queue.png)
## Installation
To install `asynq` library, run the following command:
```sh
go get -u github.com/hibiken/asynq
```
## Quickstart ## Quickstart
@ -30,7 +22,7 @@ First, make sure you are running a Redis server locally.
$ redis-server $ redis-server
``` ```
To create and schedule tasks, use `Client` and provide a task and when to enqueue the task. To create and schedule tasks, use `Client` and provide a task and when to enqueue the task. Scheduled tasks will be stored in Redis and will be enqueued at the specified time.
```go ```go
func main() { func main() {
@ -45,21 +37,21 @@ func main() {
t2 := asynq.NewTask("email:reminder", map[string]interface{}{"user_id": 42}) t2 := asynq.NewTask("email:reminder", map[string]interface{}{"user_id": 42})
// Process immediately // Enqueue immediately
err := client.Enqueue(t1) err := client.Enqueue(t1)
// Process 24 hrs later // Enqueue 24 hrs later
err = client.EnqueueIn(24*time.Hour, t2) err = client.EnqueueIn(24*time.Hour, t2)
// Process at specified time. // Enqueue at specified time.
target := time.Date(2020, time.March, 6, 10, 0, 0, 0, time.UTC) target := time.Date(2020, time.March, 6, 10, 0, 0, 0, time.UTC)
err = client.EnqueueAt(target, t2) err = client.EnqueueAt(target, t2)
// Pass options to specify processing behavior for a given task. // Pass vararg options to specify processing behavior for the given task.
// //
// MaxRetry specifies the maximum number of times this task will be retried (Default is 25). // MaxRetry specifies the max number of retry if the task fails (Default is 25).
// Queue specifies which queue to enqueue this task to (Default is "default"). // Queue specifies which queue to enqueue this task to (Default is "default" queue).
// Timeout specifies the the timeout for the task's context (Default is no timeout). // Timeout specifies the the task timeout (Default is no timeout).
err = client.Enqueue(t1, asynq.MaxRetry(10), asynq.Queue("critical"), asynq.Timeout(time.Minute)) err = client.Enqueue(t1, asynq.MaxRetry(10), asynq.Queue("critical"), asynq.Timeout(time.Minute))
} }
``` ```
@ -69,11 +61,9 @@ To start the background workers, use `Background` and provide your `Handler` to
`Handler` is an interface with one method `ProcessTask` with the following signature. `Handler` is an interface with one method `ProcessTask` with the following signature.
```go ```go
// ProcessTask should return nil if the processing of a task // ProcessTask should return nil if the processing of a task is successful.
// is successful.
// //
// If ProcessTask return a non-nil error or panics, the task // If ProcessTask return a non-nil error or panics, the task will be retried after delay.
// will be retried after delay.
type Handler interface { type Handler interface {
ProcessTask(context.Context, *asynq.Task) error ProcessTask(context.Context, *asynq.Task) error
} }
@ -99,6 +89,7 @@ func main() {
// See the godoc for other configuration options // See the godoc for other configuration options
}) })
// mux maps a type to a handler
mux := asynq.NewServeMux() mux := asynq.NewServeMux()
mux.HandleFunc("email:signup", signupEmailHandler) mux.HandleFunc("email:signup", signupEmailHandler)
mux.HandleFunc("email:reminder", reminderEmailHandler) mux.HandleFunc("email:reminder", reminderEmailHandler)
@ -121,7 +112,31 @@ func signupEmailHandler(ctx context.Context, t *asynq.Task) error {
For a more detailed walk-through of the library, see our [Getting Started Guide](https://github.com/hibiken/asynq/wiki/Getting-Started). For a more detailed walk-through of the library, see our [Getting Started Guide](https://github.com/hibiken/asynq/wiki/Getting-Started).
To Learn more about `asynq` features and APIs, see our [Wiki pages](https://github.com/hibiken/asynq/wiki) and [godoc](https://godoc.org/github.com/hibiken/asynq). To Learn more about `asynq` features and APIs, see our [Wiki](https://github.com/hibiken/asynq/wiki) and [godoc](https://godoc.org/github.com/hibiken/asynq).
## Command Line Tool
Asynq ships with a command line tool to inspect the state of queues and tasks.
Here's an example of running the `stats` command.
![Gif](/docs/assets/demo.gif)
For details on how to use the tool, refer to the tool's [README](/tools/asynqmon/README.md).
## Installation
To install `asynq` library, run the following command:
```sh
go get -u github.com/hibiken/asynq
```
To install the CLI tool, run the following command:
```sh
go get -u github.com/hibiken/asynq/tools/asynqmon
```
## Requirements ## Requirements
@ -130,18 +145,6 @@ To Learn more about `asynq` features and APIs, see our [Wiki pages](https://gith
| [Redis](https://redis.io/) | v2.8+ | | [Redis](https://redis.io/) | v2.8+ |
| [Go](https://golang.org/) | v1.12+ | | [Go](https://golang.org/) | v1.12+ |
## Command Line Tool
Asynq ships with a command line tool to inspect the state of queues and tasks.
To install, run the following command:
```sh
go get -u github.com/hibiken/asynq/tools/asynqmon
```
For details on how to use the tool, refer to the tool's [README](/tools/asynqmon/README.md).
## Contributing ## Contributing
We are open to, and grateful for, any contributions (Github issues/pull-requests, feedback on Gitter channel, etc) made by the community. We are open to, and grateful for, any contributions (Github issues/pull-requests, feedback on Gitter channel, etc) made by the community.

BIN
docs/assets/task-queue.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB