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  }