2013-03-11 15 views
6

के साथ समस्या मैं Publish/Subscribe खरगोश एमक्यू जावा ट्यूटोरियल का उपयोग करके एक प्रशंसक विनिमय बनाने में सक्षम हूं, और किसी भी जुड़े उपभोक्ता को एक संदेश की एक प्रति प्राप्त होगी। एक एक्सचेंज घोषित करने और गतिशील रूप से/प्रोग्रामिंग बाध्यकारी करने के बजाय, मैं किसी भी उपभोक्ता को जोड़ने से पहले एक्सचेंज और बाध्यकारी बनाना चाहता हूं। मैंने इसे RabbitMQ प्रबंधन कंसोल के माध्यम से किया है। हालांकि, किसी कारण से, मेरे उपभोक्ता संदेश की सभी प्रतियां प्राप्त करने के बजाए राउंड-रॉबिन फैशन में संदेश प्राप्त कर रहे हैं। मैं क्या खो रहा हूँ? यहाँ कुछ कोड के टुकड़े कर रहे हैं:खरगोश एमक्यू फैनआउट एक्सचेंज

प्रकाशक:

channel.basicPublish("public", "", null, rowId.getBytes("UTF-8")); 

उपभोक्ता:

QueueingConsumer consumer = new QueueingConsumer(channel); 
      channel.basicConsume("myqueue", false, consumer); 

... और RabbitMQ प्रबंधन कंसोल में, मैं एक मुद्रा "सार्वजनिक" बनाया के प्रकार के "फैनआउट" , और मैंने उस विनिमय से "myqueue" में बाध्यकारी सेट किया।

मैं किसी भी मदद की सराहना करता हूं!

उत्तर

17

ऐसा लगता है जैसे आपके सभी उपभोक्ता एक ही कतार की सदस्यता ले रहे हैं। जब कई उपभोक्ता एक ही कतार की सदस्यता ले रहे हैं, तो RabbitMQ का डिफ़ॉल्ट व्यवहार सभी सब्स्क्राइब किए गए उपभोक्ताओं के बीच संदेशों को राउंड-रॉबिन करना है। RabbitMQ Tutorial #2: Work Queues में "राउंड-रॉबिन प्रेषण" देखें।

प्रशंसक विनिमय यह सुनिश्चित करने के लिए है कि प्रत्येक कतार को उस संदेश की एक प्रति प्राप्त हो, प्रत्येक उपभोक्ता नहीं। यदि आप प्रत्येक उपभोक्ता को संदेश की एक प्रति प्राप्त करना चाहते हैं, तो आम तौर पर आप प्रत्येक उपभोक्ता अपनी स्वयं की कतार बनाते हैं और फिर एक्सचेंज से जुड़ जाते हैं। मुझे यकीन नहीं है कि आप प्रोग्रामिंग रूप से कतार बनाने/बाध्यकारी से बचने का प्रयास क्यों कर रहे हैं, लेकिन यदि आप समय से पहले ग्राहकों की संख्या और प्रत्येक के लिए कतार बनाते हैं, तो आप भी वही प्रभाव प्राप्त कर सकते हैं।

+1

यह उत्तर मेरे लिए बहुत उपयोगी था, धन्यवाद! मैंने सोचा कि प्रत्येक बाध्य उपभोक्ता प्रत्येक बाध्य कतार के बजाय संदेश की एक प्रति प्राप्त करेगा। यह मेरी समस्या तय है। एक बार फिर धन्यवाद! – littleK

संबंधित मुद्दे