github.com/angenalZZZ/gofunc@v0.0.0-20210507121333-48ff1be3917b/data/queue/message/message.go (about) 1 package message 2 3 import ( 4 "context" 5 json "github.com/json-iterator/go" 6 "github.com/nsqio/go-nsq" 7 ) 8 9 type TMessage struct { 10 Topic string 11 Channel string 12 } 13 14 // NsqMessage Inherent nsq. 15 type NsqMessage struct { 16 *nsq.Message 17 } 18 19 var msgKey = "nsqMsg" 20 21 // WithContext Returns nsq message from context. 22 func WithContext(ctx context.Context, msg *NsqMessage) context.Context { 23 return context.WithValue(ctx, msgKey, msg) 24 } 25 26 // FromContext Returns nsq message from context. 27 func FromContext(ctx context.Context) (*NsqMessage, bool) { 28 value, ok := ctx.Value(msgKey).(*NsqMessage) 29 return value, ok 30 } 31 32 // GiveUp Finish message with success state because message never will be possible to process. 33 func (m *NsqMessage) GiveUp() { 34 m.Finish(true) 35 } 36 37 // Success Finish message successfully. 38 func (m *NsqMessage) Success() { 39 m.Finish(true) 40 } 41 42 // Fail Mark message as failed to process. 43 func (m *NsqMessage) Fail() { 44 m.Finish(false) 45 } 46 47 // Finish Processing message. 48 func (m *NsqMessage) Finish(success bool) { 49 if success { 50 m.Message.Finish() 51 } else { 52 m.Message.Requeue(-1) 53 } 54 } 55 56 // ReadJSON UnMarshals JSON message body to interface. 57 func (m *NsqMessage) ReadJSON(v interface{}) error { 58 return json.ConfigCompatibleWithStandardLibrary.Unmarshal(m.Body, v) 59 }