diff --git a/amqp/consumer.go b/amqp/consumer.go index ba10071..322a5bb 100644 --- a/amqp/consumer.go +++ b/amqp/consumer.go @@ -1,7 +1,6 @@ package amqp import ( - "context" "regexp" "strings" "sync" @@ -226,9 +225,8 @@ func (c *Consumer) dispatch(msg amqplib.Delivery) { func (c *Consumer) doDispatch(msg amqplib.Delivery, h *handler, retryCount int32, delay time.Duration) { err := h.fn(messaging.Event{ - Action: h.action, - Body: msg.Body, - Context: context.Background(), + Action: h.action, + Body: msg.Body, }) if err != nil { diff --git a/messaging/consumer.go b/messaging/consumer.go index 26b3a99..edd0cf4 100644 --- a/messaging/consumer.go +++ b/messaging/consumer.go @@ -1,7 +1,6 @@ package messaging import ( - "context" "time" ) @@ -21,12 +20,6 @@ type SubscribeOptions struct { MaxRetries int32 } -type Event struct { - Action string - Body []byte - Context context.Context -} - type EventHandler func(Event) error type Consumer interface { diff --git a/messaging/event.go b/messaging/event.go new file mode 100644 index 0000000..92903ea --- /dev/null +++ b/messaging/event.go @@ -0,0 +1,35 @@ +package messaging + +import ( + "context" +) + +type Event struct { + Action string + Body []byte + ctx context.Context +} + +// WithContext returns a shallow copy of Event with its context changed to ctx. +// The provided ctx must be non-nil. +func (e *Event) WithContext(ctx context.Context) *Event { + if ctx == nil { + panic("nil context") + } + + e2 := new(Event) + *e2 = *e + e2.ctx = ctx + + return e2 +} + +// The returned context is always non-nil; it defaults to the background context. +// To change the context, use WithContext. +func (e *Event) Context() context.Context { + if e.ctx != nil { + return e.ctx + } + + return context.Background() +}