2
0
mirror of https://github.com/hibiken/asynq.git synced 2024-12-25 07:12:17 +08:00
golang基于redis的异步队列
Go to file
2019-12-21 07:01:03 -08:00
internal/rdb Log warning and info messages when unfinished tasks get aborted 2019-12-18 18:55:08 -08:00
tools/asynqmon Update CLI description 2019-12-21 07:01:03 -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 Hash method to Payload 2019-12-20 20:14:40 -08:00
background_test.go Rename to RedisConfig 2019-12-03 19:43:01 -08:00
background.go Stop processing more tasks from the queue once TSTP signal is received 2019-12-17 06:18:22 -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 Add Get* methods to Payload type 2019-12-20 16:01:32 -08:00
go.sum Add Get* methods to Payload type 2019-12-20 16:01:32 -08:00
LICENSE Add MIT License 2019-11-30 10:21:25 -08:00
payload_test.go Add Hash method to Payload 2019-12-20 20:14:40 -08:00
payload.go Add Hash method to Payload 2019-12-20 20:14:40 -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 Modify poller to wait for Time.After channel instead of time.Sleep 2019-12-17 20:13:41 -08:00
processor_test.go Unexport redis key name constants from rdb package 2019-12-04 17:23:11 -08:00
processor.go Rename channel name 2019-12-18 18:57:48 -08:00
README.md Add Get* methods to Payload type 2019-12-20 16:01:32 -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":
            id, err := t.Payload.GetInt("recipient_id")
            if err != nil{
                return err
            }
            fmt.Printf("Send Welcome Email to %d\n", id)

        // ... handle other task types.

        default:
            return fmt.Errorf("unexpected task type: %s", t.Type)
    }
    return nil
}