2
0
mirror of https://github.com/hibiken/asynq.git synced 2025-02-23 04:10:17 +08:00
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
2019-12-06 22:06:59 -08:00
2019-11-30 09:08:14 -08:00
2019-12-15 16:15:07 -08:00
2019-12-03 19:43:01 -08:00
2019-12-09 06:30:45 -08:00
2019-12-06 21:24:36 -08:00
2019-11-30 10:21:25 -08:00
2019-12-04 07:28:57 -08:00
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
}
Description
Languages
Go 100%