From e28d6bfc9afa450dfb039a2a1dbca82b52985b17 Mon Sep 17 00:00:00 2001 From: zenghur Date: Fri, 28 Feb 2020 02:37:00 -0800 Subject: [PATCH] feat: make context error --- client.go | 4 ++-- consumer.go | 3 ++- context.go | 11 +++++++++-- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/client.go b/client.go index 6e865e6..657c4e6 100644 --- a/client.go +++ b/client.go @@ -75,8 +75,8 @@ func (c *Client) SetMakeContext(makeContext MakeContext) { // DefaultMakeContextIfNone 保证makeContext不为空 func (c *Client) defaultMakeContext() { if c.makeContext == nil { - c.makeContext = func(m *M) context.Context { - return context.TODO() + c.makeContext = func(m *M) (context.Context, error) { + return context.TODO(), nil } } } diff --git a/consumer.go b/consumer.go index ba40b05..72d6af3 100644 --- a/consumer.go +++ b/consumer.go @@ -414,8 +414,9 @@ func (c *Consumer) OnReceive(queue *Queue, receiveMsg *ReceiveMessage) { m.EnqueueTime = receiveMsg.EnqueueTime m.codec = queue.codec m.ReceiptHandle = receiveMsg.ReceiptHandle - ctx := queue.makeContext(m) + ctx, err := queue.makeContext(m) ctx = context.WithValue(ctx, aliyunMnsM, m) + ctx = context.WithValue(ctx, aliyunMnsContextErr, err) errChan <- queue.OnReceive(ctx) }() diff --git a/context.go b/context.go index 15361d3..792391a 100644 --- a/context.go +++ b/context.go @@ -7,14 +7,21 @@ import ( type contextKey int const ( - aliyunMnsM contextKey = 0 + aliyunMnsM contextKey = 0 + aliyunMnsContextErr contextKey = 1 ) // MakeContext 生成一个context -type MakeContext func(m *M) context.Context +type MakeContext func(m *M) (context.Context, error) // MFrom 拿出message func MFrom(ctx context.Context) (*M, bool) { m, ok := ctx.Value(aliyunMnsM).(*M) return m, ok } + +// ErrFrom 拿出context error +func ErrFrom(ctx context.Context) (*M, bool) { + m, ok := ctx.Value(aliyunMnsM).(*M) + return m, ok +}