2
0
mirror of https://github.com/hibiken/asynq.git synced 2024-09-20 02:55:54 +08:00
golang基于redis的异步队列
Go to file
2019-11-30 10:21:25 -08:00
.gitignore Initial commit 2019-11-14 21:48:43 -08:00
.travis.yml Add .travis.yml 2019-11-30 09:08:14 -08:00
asynq_test.go Move test helpers to asynq_test.go 2019-11-29 20:53:29 -08:00
asynq.go Add readme 2019-11-30 09:38:46 -08:00
background_test.go Add test for background to verify no goroutine leaks 2019-11-29 20:49:18 -08:00
background.go Add test for background to verify no goroutine leaks 2019-11-29 20:49:18 -08:00
client_test.go Add test for client 2019-11-29 17:40:31 -08:00
client.go Rename (*rdb).zadd to (*rdb).schedule 2019-11-27 07:16:16 -08:00
go.mod Add test for background to verify no goroutine leaks 2019-11-29 20:49:18 -08:00
go.sum Add test for background to verify no goroutine leaks 2019-11-29 20:49:18 -08:00
LICENSE Add MIT License 2019-11-30 10:21:25 -08:00
poller_test.go Add test for poller 2019-11-29 08:00:43 -08:00
poller.go Change shutdown message to use info level logging 2019-11-29 07:14:28 -08:00
processor_test.go Add test for processor 2019-11-29 17:12:15 -08:00
processor.go Add test for processor 2019-11-29 17:12:15 -08:00
rdb_test.go Move test helpers to asynq_test.go 2019-11-29 20:53:29 -08:00
rdb.go Rename (*rdb).lrem to (*rdb).remove 2019-11-27 20:05:31 -08:00
README.md Add readme 2019-11-30 09:38:46 -08:00
retry_test.go Add test for retry task logic 2019-11-28 11:22:42 -08:00
retry.go Add test for retry task logic 2019-11-28 11:22:42 -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,
        },
    }

    // send welcome email now.
    client.Process(t1, time.Now())

    // send reminder email 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(handler)
}

func handler(t *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
}