2011-08-25 13 views
14

मेरे पास 2 सेवाएं हैं। दोनों को एक ही चैनल की सदस्यता लेने की आवश्यकता है।रेडिस पब/उप समर्थित पर प्रतिस्पर्धी उपभोक्ता?

2 सेवाएं संतुलित लोड हैं। प्रत्येक सेवा एकाधिक सर्वर पर चलती है।

तो मैं कैसे सुनिश्चित कर सकता हूं कि प्रत्येक सेवा का केवल 1 उदाहरण उस चैनल का संदेश उपभोग करता है।

क्या यह रेडिस पर समर्थित है?

धन्यवाद

उत्तर

19

pubsub कि जिस तरह से काम नहीं करता है - संदेश सभी जुड़े सदस्यता ली ग्राहकों को जाता है। हालांकि, आप इसे सेट अप कर सकते हैं ताकि चैनल किसी सूची में अपडेट की अधिसूचना हो। इस तरह सभी ग्राहकों को संदेश मिलेगा, लेकिन केवल एक ही आइटम को एलपीओपी के साथ सूची में ले जा सकता है।

+0

यह एक अच्छा विचार है। क्या आप इसे "सेट अप" पर अधिक विस्तार से समझा सकते हैं ताकि चैनल किसी सूची में अपडेट की अधिसूचना हो। धन्यवाद – jordan

+3

जब आप एक संदेश भेजते हैं तो बस दो आदेश चलाएं - एक RPUSH और एक प्रकाशित। जब किसी ग्राहक को SUBSCRIBE का उपयोग करके कोई संदेश प्राप्त होता है, तो उसे सूची में एलपीओपी कॉल करें। यदि एलपीओपी कुछ भी वापस नहीं लौटाता है तो दूसरा कार्यकर्ता पहले से ही संदेश संसाधित कर चुका है, इसलिए इसे अनदेखा किया जा सकता है। –

+0

लेकिन फिर प्रकाशक को ग्राहक को जानने और निरीक्षण पैटर्न को तोड़ने की आवश्यकता है। जैसे अब मेरे प्रकाशक को पता है कि 2 सेवाएं संदेश का उपभोग करती हैं। तो मुझे 2 चैनल में 2 RPUSH भेजने की आवश्यकता है। प्रत्येक चैनल एक सेवा के लिए नक्शा। यकीन नहीं है कि मैं आपके विचार को पूरी तरह से समझता हूं? धन्यवाद – jordan

21

एक अन्य दृष्टिकोण आपके सेवा उदाहरणों से B*POP का उपयोग करना होगा। यदि आपके पास B*POP किसी सूची के विरुद्ध चलने वाले बहुत से ग्राहक हैं, तो जब भी आप LPUSH पर जाते हैं, तो उन ग्राहकों में से एक डेटा प्राप्त करेगा, लेकिन केवल एक ही।

+3

मुझे यकीन है कि यह करने के लिए यह सही बात है। – djechlin

+2

'जबकि (सच) {BLPOP}' वास्तव में सरल है, धन्यवाद! – soulmachine