2013-02-21 63 views
7

मुझे एक आईओएस एप्लिकेशन मिला है जो RabbitMQ से बात करने के लिए STOMP Client का उपयोग करता है। एप्लिकेशन स्टार्टअप के दौरान बहुत सारे राज्य लोड करता है, और उसके बाद STOMP पर प्रकाशित अपडेट प्राप्त करके उस स्थिति को सिंक में रखता है। बेशक, अगर यह अपना कनेक्शन खो देता है, तो यह अब सुनिश्चित नहीं हो सकता है कि यह सिंक हो रहा है, और इसलिए उस बड़े प्रारंभिक ब्लॉब को फिर से लोड करना होगा। किसी भी तरह का नेटवर्क बाधा इस व्यवहार को ट्रिगर करती है और मेरे ग्राहकों को दुखी बनाती है।RabbitMQ से कनेक्ट करने के लिए STOMP का उपयोग करते समय आप मिस्ड संदेशों को फिर से कैसे चलाते हैं?

इसे ठीक करने के लिए बहुत सारे बड़े चित्र हैं (और मैं उन पर काम कर रहा हूं) लेकिन इस बीच, मैं इस समस्या को हल करने के लिए लगातार कतारों का उपयोग करने की कोशिश कर रहा हूं। विचार यह है कि सर्वर एक कतार बनाएगा, इसे उपयुक्त विषयों से बांध देगा, और फिर बड़े स्टार्टअप बंडल का निर्माण शुरू करें। समाप्त होने पर, यह सबकुछ क्लाइंट को सौंप देगा। क्लाइंट स्टार्टअप बंडल के साथ स्वयं को सेट करेगा, कतार में सदस्यता खोल देगा, और उसके बाद सर्वर को तैयार होने के दौरान होने वाले किसी भी अपडेट को संसाधित करेगा। इसी तरह, यदि क्लाइंट डिस्कनेक्ट हो जाना चाहिए, तो यह कतार में मिलने वाले संदेशों को फिर से कनेक्ट और फिर से शुरू कर सकता है।

मेरी समस्या यह है कि जब क्लाइंट कनेक्ट होने से पहले भेजे गए संदेशों को सफलतापूर्वक प्राप्त करता है, तो कनेक्ट होने से पहले कतार में कोई संदेश था, तो वे पढ़ नहीं पाए जाते हैं। इसी तरह, यदि ग्राहक डिस्कनेक्ट हो जाता है, जब यह फिर से कनेक्ट होता है, तो यह किसी भी संदेश को नहीं देख पाएगा जो दूर था।

क्या कोई सुझाव दे सकता है कि मैं क्लाइंट को उन लापता संदेशों को पढ़ने में सक्षम कैसे हो सकता हूं?

उत्तर

6

यह पता चला कि क्या हो रहा था यह था कि STOMP एडाप्टर संदेश का उपभोग कर रहा था लेकिन उन्हें वितरित करने में विफल रहा था। इस प्रकार, जब ग्राहक पुन: कनेक्ट होता है, तो उसके पास कोई संदेश प्रतीक्षा नहीं होता है।

समस्या को ठीक करने के लिए, मैंने सब्सक्राइब अनुरोध पर "क्लाइंट" सेटिंग को "क्लाइंट" में बदल दिया, जिसका अर्थ है कि STOMP को तब तक संदेश पर विचार नहीं करना चाहिए जब तक क्लाइंट एसीके फ्रेम वापस नहीं भेजता। मेरे क्लाइंट को उचित रूप से बदलकर, क्लाइंट दूर होने के बाद भी संदेश वितरित हो जाते हैं।