रैबिटएमक्यू नेटिवली डिलेड मैसेज का समर्थन नहीं करता है। वर्तमान में, मुख्य अमलनाएं मरे हैं डेड-लेटर एक्सचेंज + मैसेज TTL योजना या rabbitmq-delayed-message-exchange प्लगइन का इस्तेमाल करना।

डिलेड क्यू के उपयोग मामले

  • स्थितियाँ जहाँ संदेश उत्पादन और सेवन के लिए समय विंडो की आवश्यकता है। उदाहरण के लिए, ई-कॉमर्स लेनदारी में, एक स्थिति होती है जब अगर किसी भुगतान को निर्धारित समय सीमा के अंदर पूरा नहीं किया गया है तो ऑर्डर बंद हो जाता है। इस मामले में, एक डिलेड मैसेज उत्पन्न होता है जब ऑर्डर बनाया जाता है। यह संदेश 30 मिनट बाद सेवक को भेजा जाता है, और सेवक को यह देखना होता है कि क्या संबंधित ऑर्डर किसी भुगतान किया गया है। यदि भुगतान पूरा नहीं होता है, तो ऑर्डर बंद हो जाता है; अगर भुगतान पूरा हो जाता है, तो संदेश नजरअंदाज किया जाता है।
  • संदेश के द्वारा डिलेड कार्यों को ट्रिगर करने वाली स्थितियों में। उदाहरण के लिए, एक निर्धारित समय सीमा के बाद उपयोगकर्ताओं को अनुस्मारक संदेश भेजना।

डेड-लेटर एक्सचेंज + मैसेज TTL योजना

इस दृष्टिकोण का मूल विचार है एक कत्तर के बिना एक कत्तर बनाना और संदेश समाप्ति समय (TTL) का इस्तेमाल करना। जब एक संदेश समाप्त होता है, तो यह एक डेड-लेटर बन जाता है, जो एक डेड-लेटर एक्सचेंज को रूट किया जाता है, और फिर एक डेड-लेटर कत्तर को जो सेव किया जा सकता है।

इस दृष्टिकोण के अनुसार, संदेश समाप्ति समय संदेश देरी का समय का कार्य करता है। उदाहरण के लिए, यदि संदेश TTL को 30 सेकंड पर सेट किया गया है और कत्तर के लिए कोई सेवक नहीं है, तो संदेश 30 सेकंड के बाद समाप्त हो जाएगा और एक डेड-लेटर बन जाएगा, जो डेड-लेटर कत्तर द्वारा संभाला जाएगा।

इस दृष्टिकोण को लागू करने के लिए, निम्नलिखित दो ट्यूटोरियल्स में विशिष्टताएं सेट की जानी चाहिए:

डिलेड संदेश प्लगइन समाधान

1. प्लगइन स्थापित करना

rabbitmq-delayed-message-exchange GitHub भंडार:

https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases

GitHub पृष्ठ के रिलीज सेक्शन से rabbitmq_delayed_message_exchange-3.8.9-0199d11c.ez फ़ाइल डाउनलोड करें और इसे RabbitMQ प्लगइन निर्देशिका (प्लगइन निर्देशिका) में रखें।

नोट: संस्करण संख्या इस ट्यूटोरियल में दी गई संस्करण संख्या से अलग हो सकती है। यदि आपका RabbitMQ नवीनतम संस्करण है, तो बस प्लगइन का नवीनतम संस्करण चुनें।

2. प्लगइन सक्रिय करना

rabbitmq-plugins enable rabbitmq_delayed_message_exchange

3. एक्सचेंज की परिभाषा करना

x-delayed-type का उपयोग करके कस्टम एक्सचेंज गुणवत्ता सेट करें ताकि डिलेड संदेश भेजने का समर्थन करें।

props := make(map[string]interface{})
// समय बाद भेजी जाने वाली संदेश का समर्थन करने के लिए key पैरामीटर
props["x-delayed-type"] = "direct"

// एक्सचेंज का दावा करें
err = ch.ExchangeDeclare(
"delay.queue", // एक्सचेंज नाम
"fanout",      // एक्सचेंज प्रकार
true,          // स्थायी
false,
false,
false,
props,         // गुणवत्ताएँ सेट करें
)

4. विलंबित संदेश भेजना

x-delay शीर्षक (x-delay) का उपयोग करके संदेश विलंबित का समय सेट करें।

msgHeaders := make(map[string]interface{})
// मिलीसेकंड में संदेश विलंब का समय सेट करें
msgHeaders["x-delay"] = 6000

err = ch.Publish(
"delay.queue", // एक्सचेंज नाम
"",            // रूटिंग पैरामीटर
false,
false,
amqp.Publishing{
Headers: msgHeaders,   // संदेश हेडर्स सेट करें
ContentType: "text/plain",
Body: []byte(body),
})

नोट: यदि आप सीधे अलीबाबा क्लाउड के रैबिटएमक्यू संदेश कत्तर सेवा का उपयोग कर रहे हैं, तो प्लगइन स्थापित किए बिना संदेश विलंब को संदेश हेडर विशेषता (विलंब) का उपयोग करके समय सेट किया जा सकता है। अलीबाबा क्लाउड ने पहले ही इस उद्देश्य के लिए रैबिटएमक्यू का विस्तार किया है।