// Enqueue an already existing job by jobId. This can be used for fast retries func (c *RedisClient) Enqueue(jobIds ...string) error { args := redis.Args{} args.AddFlat(jobIds) _, err := c.conn.Do("ENQUEUE", args) return err }
// GetMulti gets <count> jobs from the given queues, or times out if timeout has elapsed without // enough jobs being available. Returns a list of jobs or an error func (c *RedisClient) GetMulti(count int, timeout time.Duration, queues ...string) ([]Job, error) { if len(queues) == 0 { return nil, errors.New("disque: no queues specified") } if count < 0 { return nil, fmt.Errorf("disque: invalid count %d", count) } args := redis.Args{} if timeout > 0 { args = args.Add("TIMEOUT", int64(timeout/time.Millisecond)) } if count > 0 { args = args.Add("COUNT", count) } args = args.Add("FROM") args = args.AddFlat(queues) vals, err := redis.Values(c.conn.Do("GETJOB", args...)) if err != nil { return nil, fmt.Errorf("disque: could not get jobs: %s", err) } ret := make([]Job, 0, len(vals)) for _, v := range vals { if arr, ok := v.([]interface{}); ok { ret = append(ret, Job{ Queue: string(arr[0].([]byte)), id: string(arr[1].([]byte)), Data: arr[2].([]byte), }) } } return ret, nil }