mirror of
https://github.com/hibiken/asynq.git
synced 2026-05-18 04:03:06 +08:00
Feature: Add Headers Support to Tasks (#1070)
* feat(task): Add headers support to tasks * fix: cleanup copy map code * fix: Add tests
This commit is contained in:
29
asynq.go
29
asynq.go
@@ -8,6 +8,7 @@ import (
|
||||
"context"
|
||||
"crypto/tls"
|
||||
"fmt"
|
||||
"maps"
|
||||
"net"
|
||||
"net/url"
|
||||
"strconv"
|
||||
@@ -26,6 +27,9 @@ type Task struct {
|
||||
// payload holds data needed to perform the task.
|
||||
payload []byte
|
||||
|
||||
// headers holds additional metadata for the task.
|
||||
headers map[string]string
|
||||
|
||||
// opts holds options for the task.
|
||||
opts []Option
|
||||
|
||||
@@ -33,8 +37,9 @@ type Task struct {
|
||||
w *ResultWriter
|
||||
}
|
||||
|
||||
func (t *Task) Type() string { return t.typename }
|
||||
func (t *Task) Payload() []byte { return t.payload }
|
||||
func (t *Task) Type() string { return t.typename }
|
||||
func (t *Task) Payload() []byte { return t.payload }
|
||||
func (t *Task) Headers() map[string]string { return t.headers }
|
||||
|
||||
// ResultWriter returns a pointer to the ResultWriter associated with the task.
|
||||
//
|
||||
@@ -48,6 +53,21 @@ func NewTask(typename string, payload []byte, opts ...Option) *Task {
|
||||
return &Task{
|
||||
typename: typename,
|
||||
payload: payload,
|
||||
headers: nil,
|
||||
opts: opts,
|
||||
}
|
||||
}
|
||||
|
||||
// NewTaskWithHeaders returns a new Task given a type name, payload data, and headers.
|
||||
// Options can be passed to configure task processing behavior.
|
||||
// TODO: In the next major (breaking) release, fold this functionality into NewTask
|
||||
//
|
||||
// so that headers are supported directly. After that, remove this method.
|
||||
func NewTaskWithHeaders(typename string, payload []byte, headers map[string]string, opts ...Option) *Task {
|
||||
return &Task{
|
||||
typename: typename,
|
||||
payload: payload,
|
||||
headers: maps.Clone(headers),
|
||||
opts: opts,
|
||||
}
|
||||
}
|
||||
@@ -57,6 +77,7 @@ func newTask(typename string, payload []byte, w *ResultWriter) *Task {
|
||||
return &Task{
|
||||
typename: typename,
|
||||
payload: payload,
|
||||
headers: make(map[string]string),
|
||||
w: w,
|
||||
}
|
||||
}
|
||||
@@ -75,6 +96,9 @@ type TaskInfo struct {
|
||||
// Payload is the payload data of the task.
|
||||
Payload []byte
|
||||
|
||||
// Headers holds additional metadata for the task.
|
||||
Headers map[string]string
|
||||
|
||||
// State indicates the task state.
|
||||
State TaskState
|
||||
|
||||
@@ -145,6 +169,7 @@ func newTaskInfo(msg *base.TaskMessage, state base.TaskState, nextProcessAt time
|
||||
Queue: msg.Queue,
|
||||
Type: msg.Type,
|
||||
Payload: msg.Payload, // Do we need to make a copy?
|
||||
Headers: msg.Headers,
|
||||
MaxRetry: msg.Retry,
|
||||
Retried: msg.Retried,
|
||||
LastErr: msg.ErrorMsg,
|
||||
|
||||
Reference in New Issue
Block a user