संदेश
संदेश Watermill के मूल भागों में से एक है। संदेश "प्रकाशकों" द्वारा प्रकाशित किए जाते हैं और "ग्राहकों" द्वारा प्राप्त किए जाते हैं। संदेश का प्रसंस्करण करते समय, यदि प्रसंस्करण विफल होता है, तो आपको एक Ack()
(सफल प्रसंस्करण का संकेत देता है) या एक Nack()
(प्रसंस्करण विफलता का संकेत देता है) भेजना चाहिए।
संदेश का Ack
और Nack
ग्राहकों द्वारा हैं (डिफ़ॉल्ट अनुमानित रूप में, ग्राहक Ack
या Nack
का इंतजार करेंगे)।
पूरा स्रोत कोड: github.com/ThreeDotsLabs/watermill/message/message.go
// ...
type Message struct {
// UUID संदेश की अद्वितीय पहचानकर्ता है।
//
// यह Watermill द्वारा डीबगिंग के लिए उपयोग किया जाता है।
// UUID खाली भी हो सकता है।
UUID string
// Metadata संदेश का मेटाडेटा धारण करता है।
//
// पूरे पेयलोड से डिकोड करने की आवश्यकता नहीं होने वाले डेटा को संग्रहित करने के लिए प्रयोग किया जा सकता है।
// यह HTTP अनुरोध हेडर के अनुरूप होता है।
//
// मेटाडेटा को marshaled करके और PubSub में सहेजा जाएगा।
Metadata Metadata
// पेयलोड संदेश का पेयलोड होता है।
Payload Payload
// एक भेजा जाता है जब एक स्वीकृति प्राप्त होता है।
// noAck एक नकारात्मक स्वीकृति प्राप्त होने पर बंद किया जाता है।
ack chan struct{}
noAck chan struct{}
ackMutex sync.Mutex
ackSentType ackType
ctx context.Context
}
// ...
Ack
Ack
भेजना
पूरा स्रोत कोड: github.com/ThreeDotsLabs/watermill/message/message.go
// ...
// Ack संदेश के लिए एक स्वीकृति भेजता है।
//
// Ack रोक नहीं देता।
// Ack idempotent है।
// अगर पहले से ही Nack भेज दिया गया है तो false लौटाता है।
func (m *Message) Ack() bool {
// ...
Nack
पूरा स्रोत कोड: github.com/ThreeDotsLabs/watermill/message/message.go
// ...
// Nack संदेश के लिए एक नकारात्मक स्वीकृति भेजता है।
//
// Nack रोक नहीं देता।
// Nack idempotent है।
// अगर पहले से ही Ack भेज दिया गया है तो false लौटाता है।
func (m *Message) Nack() bool {
// ...
Ack/Nack
प्राप्त करना
पूरा स्रोत कोड: github.com/ThreeDotsLabs/watermill/docs/content/docs/message/receiving-ack.go
// ...
select {
case
संदेश
संदेश मानक पुस्तकालय का संदर्भ रखते हैं, जैसे कि एक HTTP अनुरोध।
पूरा स्रोत कोड: github.com/ThreeDotsLabs/watermill/message/message.go
// ...
// Context संदेश का संदेश है। ताकि, कॉन्टेक्स्ट बदलने के लिए SetContext का प्रयोग करें।
//
// वापसी कॉन्टेक्स्ट हमेशा गैर-निल होता है; डिफ़ॉल्ट रूप में पृष्ठभूमि का कॉन्टेक्स्ट होता है।
func (m *Message) Context() context.Context {
if m.ctx != nil {
return m.ctx
}
return context.Background()
}
// SetContext द्वारा प्रदान किए गए कॉन्टेक्स्ट को संदेश का कॉन्टेक्स्ट सेट करता है।
func (m *Message) SetContext(ctx context.Context) {
m.ctx = ctx
}
// ...