2012-05-24 22 views
22

क्या खरगोश एमक्यू की संदेश प्राथमिकता की कोई अवधारणा है? कतार में इससे पहले बैठे कम महत्वपूर्ण संदेशों के कारण मेरे पास कुछ समस्याएं धीमी हो रही हैं। मैं उच्च प्राथमिकता वाले लोगों को प्राथमिकता लेने और कतार के सामने जाने के लिए प्यार करूंगा।खरगोश एमक्यू और संदेश प्राथमिकता

मुझे पता है कि मैं दो कतारों का उपयोग करके "तेज़" कतार और "धीमी" कतार का उपयोग कर अनुमान लगा सकता हूं, लेकिन यह एक हैक जैसा लगता है।

क्या कोई भी RabbitMQ का उपयोग करके बेहतर समाधान के बारे में जानता है?

+1

यकीन है कि एक कतार का मुद्दा यह है कि अपनी फीफो है, इसलिए प्राथमिकता की अवधारणा खिड़की से बाहर जाती है। – robthewolf

+0

एक्टिवएमक्यू जैसी कई तकनीकों में संदेश प्राथमिकता अवधारणा भी है। इससे कतार एक हाइब्रिड फीफो/प्राथमिकता कतार हो सकती है। – Kelly

उत्तर

35

इस प्रश्न का उत्तर पुराना है। RabbitMQ 3.5.0 के रूप में, अब AMQP मानक प्रति-संदेश प्राथमिकताओं के लिए मूल समर्थन है। documentation सभी रक्तमय विवरण है, लेकिन संक्षेप में:

  • आप समय कतार बनाई गई है पर कतार की प्राथमिकता सीमा को परिभाषित करने की जरूरत है;
  • प्राथमिकता सेट के बिना संदेश 0 की प्राथमिकता प्राप्त करते हैं;
  • कतार पर अधिकतम सेट से अधिक संख्यात्मक प्राथमिकता वाले संदेश कतार का समर्थन करने की सर्वोच्च प्राथमिकता प्राप्त करते हैं।

अधिक दिलचस्प चेतावनियां डॉक्स में कर रहे हैं। उन्हें पढ़ने के लायक है।

+0

हैलो @ वोम्बल, मैंने डॉक्टर को पढ़ा है और इसे लागू करने में कुछ परेशानी थी। अन्य दस्तावेज बहुत अस्पष्ट है। अगर आपको कोई अंतर्दृष्टि मिली है। मेरा सवाल है [यहां] (http://stackoverflow.com/questions/29221020/rabbitmq-3-5-and-message-priority) – Ommit

+1

ऐसा लगता है कि यह संदेश प्राथमिकता नहीं है लेकिन उपभोक्ता प्राथमिकता है, जो मुझे लगता है कि विभिन्न अवधारणाएं हैं और उपरोक्त प्रश्न के उत्तर नहीं। – Kostanos

+0

इसे सही उत्तर में बदल दिया क्योंकि RabbitMQ अब प्राथमिकता कतारों का समर्थन करता है। – Kelly

-2

खरगोश एमक्यू/एएमक्यूपी में निश्चित रूप से संदेश प्राथमिकता की अवधारणा है - एक कतार के सिर पर संदेश इसके पीछे एक प्राथमिकता प्राप्त करता है, और उसके पीछे एक पर प्राथमिकता प्राप्त होती है, और इसी तरह, विज्ञापन infinitum।

क्या आप उस मॉडल को बदल सकते हैं? नहीं! :)

9

आईआईआरसी खरगोश एमक्यू अभी भी एएमक्यूपी प्रोटोकॉल संस्करण 0.9.1 का उपयोग करता है (spec here प्राप्त करें)।

Messages may have a priority level. A high priority message is sent ahead of lower  priority messages 
waiting in the same message queue. When messages must be discarded in order to maintain a specific 
service quality level the server will first discard low-priority messages. 

और:: कल्पना निश्चित रूप से संदेश प्राथमिकता का उल्लेख है

Note that in the presence of multiple readers from a queue, or client transactions, or use of priority fields, 
or use of message selectors, or implementation-specific delivery optimisations the queue MAY NOT 
exhibit true FIFO characteristics. 

कल्पना का कहना है प्राथमिकता एक MUST है, इसलिए मुझे लगता है कि RabbitMQ इसे लागू करना चाहिए, लेकिन आप अपने दस्तावेज़ देखें कर सकते हैं।

+1

इस उत्तर एक सप्ताह पहले तक गलत थी जब RabbitMQ 3.5.0 जारी किया गया था और घोषणा की के लिए प्राथमिकता कतारों ;-) उत्तर के लिए धन्यवाद – ferrouswheel

20

खरगोश की प्राथमिकता की कोई अवधारणा नहीं है, क्योंकि ब्रायन संक्षेप में इसे रखता है, सामने वाला पहला वहां होता है। ;-)

मैं आपके कतारों के एक सेट को लागू करने का सुझाव दूंगा जो आपकी विशेष संदेश आवश्यकता की सेवा करने के लिए सेवा प्रदान करता है और इन कतारों को मॉडल को आपकी प्राथमिकता की आवश्यकता है, कहें, उन्हें 'MyQueueP1', 'MyQueueP2' और इसी तरह से कहें हमारे उपभोक्ता पहले पी 2 (आदि) से पहले पी 1 की जांच करते हैं और वहां से सेवा संदेश देखते हैं।

यदि आपके पास एक संदेश है जो उच्च प्राथमिकता है तो आप उचित रूटिंग कुंजी और वॉयला के माध्यम से उचित प्राथमिकता कतार में प्रकाशित करेंगे।

[अद्यतन] चेक इस सवाल: In a FIFO Qeueing system, what's the best way the to implement priority messaging

[अद्यतन] प्रति हाल RabbitMQ रिलीज 3.5.0 के रूप में इस सवाल का जवाब अब पुरानी हो चुकी है और यह जारी होने से पहले ही संस्करणों के लिए मान्य माना जाना चाहिए। https://stackoverflow.com/a/29068288/489888

+0

समर्थन, मैं इस के लिए कई कतारों की स्थापना से बचने के लिए उम्मीद कर रहा था, लेकिन यह ऐसा करने के लिए जिस तरह से लग रहा है चले जाओ। – Kelly

+1

[www.rabbitmq.com/api-guide.html] से कुछ जानकारी: अनुभाग ** प्रकाशन संदेश **: यह डिलीवरी मोड 2 (लगातार), प्राथमिकता 0 और सामग्री-प्रकार "टेक्स्ट/सादा" के साथ एक संदेश भेजता है। आप अपनी संदेश गुण वस्तु का निर्माण कर सकते हैं, एक बिल्डर क्लास का उपयोग करके आप जितनी चाहें उतनी संपत्तियों का उल्लेख कर सकते हैं, उदाहरण के लिए: channel.basicPublish (एक्सचेंजनाम, रूटिंगकी, नई AMQP.BasicProperties.Builder() .contentType ("text/plain") .deliveryMode (2) .priority (1) .userId ("बॉब") .build()), messageBodyBytes); – user2602807

+0

लेकिन वहाँ "प्राथमिकता" के बारे में कोई अन्य विवरण है, और वे क्या मतलब है – user2602807

-7

यदि यह प्राथमिकता लागू किया गया है, तो यह एक एमक्यू नहीं होगा।

एमक्यू डेटा के लिए ईमेल हैं। और सभी डेटा ट्रांसमिशन संरक्षण आदेश में महत्वपूर्ण है। यदि आप ऑर्डर स्विच करते हैं, तो प्रविष्टियों से पहले हटाए जाते हैं, अपडेट अनुक्रम से बाहर हो जाते हैं। कुछ भी ठीक से काम नहीं करता है।

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

किसी ईवेंट को कहने के लिए ए को घटना बी से अधिक प्राथमिकता हो सकती है, दोनों घटनाओं को हमेशा डी-युग्मित होना चाहिए। और जब ऐसा होता है तो एक आश्चर्य होता है कि वे एक ही कतार संरचना में क्यों मौजूद हैं।फिर फिर, यदि यह पेलोड से संबंधित है, तो उस पेलोड के लिए गणना प्रयास भी सिस्टम के प्रदर्शन को प्रभावित करेगा, इसलिए जल्द से जल्द निर्णय लेना, यानी पेलोड बनाने से पहले।

+4

बहुत सारे संदेश कतार (हॉर्नेटक, एक्टिवएमक्यू ... आदि) हैं जो संदेश प्राथमिकता को लागू करते हैं और इसका समर्थन करने वाले बहुत से मामलों का उपयोग करते हैं। –

+0

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

+0

टेंगेंशियल, लेकिन मुझे नहीं पता कि ईमेल डिलीवरी के आदेश की गारंटी कैसे देगा। असल में, 'प्राथमिकता:' शीर्षलेख के माध्यम से ईमेल * * (क्रूड) परिवहन प्राथमिकताओं को करता है। – tripleee

0

हम rabbitmq को https://www.rabbitmq.com/community-plugins.html से प्लगइन rabbitmq_priority_queue इंस्टॉल करके वितरित प्राथमिकता कतार बना सकते हैं। आपको प्लगइन rabbitmq_priority_queue-3.3.x-72d20292.ez डाउनलोड करना होगा और अपने खरगोश mq स्थापना निर्देशिका के प्लगइन फ़ोल्डर को अंदर रखना होगा। सर्वर को पुनरारंभ करें। अब आप कतार में आइटम को प्राथमिकता के साथ सम्मिलित कर सकते हैं और तदनुसार इसका उपभोग कर सकते हैं, How to poll the RabbitMQ to get messages in order of priority continuously? में नमूना कोड चिपकाया है।

0

हां, खरगोश एमक्यू प्राथमिकता कतारों का समर्थन करता है।

एक प्राथमिकता कतार के रूप में एक कतार काम करे, इसके संपत्ति x-max-priority की आपूर्ति जब कतार घोषणा की।

संपत्ति x-max-priority अधिकतम प्राथमिकता नंबर कतार का समर्थन करता है परिभाषित करता है।

जावा में, आप नीचे की तरह कर सकते हैं:

Map<String, Object> props = new HashMap<>(); 
props.put("x-max-priority", 10); // max priority number as 10 
channel.queueDeclare(QUEUE_NAME, durable, false, false, props); 

एक विशेष प्राथमिकता के सन्देश को प्रकाशित करने के लिए, नीचे की तरह कार्य करें:

String message = "My message with priority 7"; 
AMQP.BasicProperties.Builder basicProps = new AMQP.BasicProperties.Builder(); 
basicProps.contentType("text/plain") 
      .priority(7); 
channel.basicPublish("", QUEUE_NAME, basicProps.build(), message.getBytes()); 
संबंधित मुद्दे