2012-11-29 27 views
5

मैं अपनी परियोजना में RabbitMQ वेब-STOMP का उपयोग करता हूं और यह मेरे लिए बहुत अच्छा है, लेकिन इसके साथ एक समस्या है। जब उपभोक्ता एक कतार की सदस्यता लेता है तो यह तुरंत कतार से सभी संदेश प्राप्त करता है। मेरे मामले में, एक संदेश कार्य में अधिक समय लग सकता है और जब उपभोक्ता को पूरा किया गया था तो उपभोक्ता को कतार से अगला संदेश प्राप्त करना आवश्यक है।क्या RabbitMQ STOMP के लिए संदेश लेने से रोकने का कोई तरीका है जब तक कि पिछले एसीकेड नहीं होगा?

सभी काम ठीक है, जब उपभोक्ताओं की सदस्यता के बाद प्रकाशन शुरू होता है, लेकिन जब पहले से ही कतार में संदेश होते हैं, तो पहले सब्सक्राइब किए गए उपभोक्ता को वे सभी मिलेंगे और अन्य स्वतंत्र रहेंगे। क्या अगला संदेश केवल उपभोग करने के लिए नोड-amqp queue.shift() विधि जैसे कुछ है?

उत्तर

4

(? किस ग्राहक को उपयोग कर रहे हैं)

जवाब आपके सवाल का basic_qos है, amqp reference देख सकते हैं और के लिए basic.qos

खोज C# एपीआई में आप निम्न करना होगा:

int prefetch = 10; 

IModel channel = connection.CreateModel(); //where connection is IConnection 
channel.basic_qos(0, prefetch, false); 

प्रीफेच आकार का उपयोग rabbitmq सर्वर को बताने के लिए किया जा सकता है कि उपभोक्ता को कितने संदेश एसीकेड तक भेजते हैं। यदि नो-एसीके विकल्प सेट किया गया है तो प्रीफेच आकार को अनदेखा किया जाता है।

इस मूल्य को ध्यान में रखते हुए भालू को संभावित प्रदर्शन प्रभाव हो सकता है, this पर एक नज़र डालें।

+0

मैं ब्राउजर जेएस के साथ RabbitMQ वेब - ** STOMP ** का उपयोग करता हूं। मुझे पहले से ही पता है कि सी # या यहां तक ​​कि node.js का उपयोग करके इसका निपटारा कैसे किया जाए, लेकिन क्या STOMP के लिए क्यूओएस है? –

+1

प्रीफेच सेट करना: 1 कनेक्ट हेडर और एक: SUBSCRIBE के लिए क्लाइंट हेडर मेरे लिए काम नहीं करता है ... –

+1

मेरी आंखें कहां थीं! बेशक, "prefetch-count": सदस्यता के लिए 1 हेडर जवाब है, धन्यवाद! –