प्रकाशक

पूरा स्रोत कोड: github.com/ThreeDotsLabs/watermill/message/pubsub.go

// ...
type Publisher  interface {
    // दिए गए संदेशों को दिए गए विषय पर प्रकाशित करता है।
    //
    // प्रकाशन समर्थन संचालन पर निर्भर करता है, यह संचालन हो सकता है संबंधित है।
    //
    // अधिकांश प्रकाशक कार्यान्वयन में परमाणु संदेश प्रकाशन का समर्थन नहीं करते हैं।
    // इसका अर्थ है कि यदि में से एक संदेश का प्रकाशन विफल होता है, तो अगला संदेश प्रकाशित नहीं होगा।
    //
    // प्रकाशन को सम्भावना से सबंधित होना चाहिए।
    Publish(topic string, messages ...*Message) error
    // यदि प्रकाशक असमर्थ है, तो Close बकाया संदेश प्लश करना चाहिए।
    Close() error
}
// ...

एकाधिक संदेश प्रकाशन

अधिकांश प्रकाशक कार्यान्वयन एकाधिक संदेश प्रकाशन का समर्थन नहीं करते हैं। यह अर्थ है कि यदि में से एक संदेश प्रकाशन विफल होता है, तो अगला संदेश प्रकाशित नहीं होगा।

असमर्थ संदेश प्रकाशन

प्रकाशन संबंधित है, यह संचालन हो सकता है संबंधित है।

Close()

यदि प्रकाशक असमर्थ है, Close बकाया संदेश प्लश करना चाहिए। यह न भूलें कि उपभोक्ताओं को बंद करें। अन्यथा, आपको कुछ संदेश खोने की संभावना है।

उपभोक्ता

पूरा स्रोत कोड: github.com/ThreeDotsLabs/watermill/message/pubsub.go

// ...
type Subscriber interface {
    // दिए गए विषय से संदेश वाले आउटपुट चैनल के साथ सदस्यता लेता है।
    // चैनल Close() यहाँ बंद कर देगा।
    //
    // अगला संदेश प्राप्त करने के लिए, मिले संदेश पर `Ack()` को कॉल करना चाहिए।
    // यदि संदेश प्रसंस्करण विफल हो जाता है और संदेश को फिर से प्रस्तुत किया जाना चाहिए, तो `Nack()` को कॉल करना चाहिए।
    //
    // प्रदान किए गए ctx रद्द हो जाने पर, सदस्य सदस्यता बंद करेगा और आउटपुट चैनल को बंद करेगा।
    // प्रदान किए गए ctx सभी उत्पन्न संदेशों पर सेट किया जाएगा।
    // Ack या Nack को मैसेज पर कॉल करने पर, मैसेज का संदर्भ रद्द हो जाएगा।
    Subscribe(ctx context.Context, topic string) 
}

Ack/Nack Mechanism

उपभोक्ताओं को संदेश से Ack और Nack का संबोधन करना होगा। सही कार्यान्वयन के लिए Ack व् Nack की प्रतीक्षा करनी चाहिए।

महत्वपूर्ण उपभोक्ता कार्यान्वयन झलक : जलदी संदेश प्रसंस्करण करने से पहले, डिस्क्रेड Mssage से Ack/offset को संदेश की संग्रह/ऐजेंट को भेजना अत्यंत महत्वपूर्ण है। अन्यथा, अगर प्रक्रिया संदेश को प्रसंस्करण करते समय मर जाती है, तो संदेश को खोने की संभावना है।

Close()

Close सभी सदस्यताओं और उनके आउटपुट चैनल को बंद करेगा, और यदि आवश्यक हो, ऑफसेट्स को बकाया करेगा।

कम से कम एक बार वितरण

वाटरमिल कम से कम एक बार प्रसारण नैतिकता का उपयोग करके बनाया गया है। यह अर्थ है कि अगर संदेश के प्रसंस्करण के दौरान कोई त्रुटि होती है और Ack भेजना संभव नहीं है, तो संदेश फिर से प्रस्तुत किया जाएगा।

आपको इसे ध्यान में रखना चाहिए और अपने अनुप्रयोग को अच्छी तरह से संरक्षित प्रसंस्करण के लिए बनाना चाहिए या पुनः प्रयास मैक्यूनिज्म का कार्यान्वयन करना चाहिए।

दुर्भाग्य से, सामान्य पुनः प्रयास माध्यमवर्ती बनाना संभव नहीं है, इसलिए हम आपको अपने अपने कार्यान्वयन के लिए पुनःप्रयास अपना खुद का कार्यान्वयन करने की प्रोत्सुक करते हैं।

सामान्य परीक्षण

हर पब/सब के अधिकांश दृष्टिकोण में समान होते हैं। हर पब/सब कार्यान्वयन के लिए अलग-अलग परीक्षण लिखने से बचने के लिए हमने एक परीक्षण सुइट बनाई है जिसे कोई भी पब/सब को पार करना चाहिए।

ये परीक्षण pubsub/tests/test_pubsub.go में मिल सकते हैं।

निर्मित कार्यान्वयन

उपलब्ध पब/सब कार्यान्वयन की जांच करने के लिए, कृपया समर्थनित पब/सब की ओर संदर्भित करें।

सान्निधिक कार्यान्वयन का कार्यान्वयन करना

नया पब/सब के लिए समर्थन उपनियमक करने के लिए निर्देशों के लिए, “सान्निधिक पब/सब कार्यान्वयन” पर संदर्भित करें।