2
0
mirror of https://github.com/hibiken/asynq.git synced 2024-09-20 11:05:58 +08:00
golang基于redis的异步队列
Go to file
Ken Hibino 989b2b6d55 Add timeout to worker goroutines when TERM signal is received
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.
2019-12-15 21:00:09 -08:00
internal/rdb Fix: Do not use lua cjson library to encode task to json 2019-12-15 20:05:56 -08:00
tools/asynqmon Add delall command to asynqmon CLI 2019-12-12 07:02:14 -08:00
.gitignore Change cmd dir to tools 2019-12-06 22:06:59 -08:00
.travis.yml Add .travis.yml 2019-11-30 09:08:14 -08:00
asynq_test.go Replace google/uuid package with rs/xid for more compact id 2019-12-11 07:41:38 -08:00
asynq.go Add Retry method to *RDB 2019-12-15 16:15:07 -08:00
background_test.go Rename to RedisConfig 2019-12-03 19:43:01 -08:00
background.go Minor improvement 2019-12-09 06:30:45 -08:00
client_test.go Unexport redis key name constants from rdb package 2019-12-04 17:23:11 -08:00
client.go Replace google/uuid package with rs/xid for more compact id 2019-12-11 07:41:38 -08:00
doc.go Add doc.go for package documentation 2019-12-06 21:24:36 -08:00
go.mod Replace google/uuid package with rs/xid for more compact id 2019-12-11 07:41:38 -08:00
go.sum Replace google/uuid package with rs/xid for more compact id 2019-12-11 07:41:38 -08:00
LICENSE Add MIT License 2019-11-30 10:21:25 -08:00
poller_test.go Add timeout to worker goroutines when TERM signal is received 2019-12-15 21:00:09 -08:00
poller.go Rename to CheckAndEnqueue 2019-12-04 07:28:57 -08:00
processor_test.go Unexport redis key name constants from rdb package 2019-12-04 17:23:11 -08:00
processor.go Add timeout to worker goroutines when TERM signal is received 2019-12-15 21:00:09 -08:00
README.md Fix readme 2019-12-07 08:47:17 -08:00

Asynq Build Status

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

  1. Import asynq in your file.
import "github.com/hibiken/asynq"
  1. 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))
}
  1. 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
}