मेरे पास एक ऐसा एप्लिकेशन है जो दो घटकों के बीच संदेश भेजने/प्राप्त करने के लिए संदेश कतार के रूप में RabbitMQ का उपयोग करता है: प्रेषक और रिसीवर। प्रेषक संदेश को बहुत तेज़ तरीके से भेजता है। रिसीवर संदेश प्राप्त करता है और फिर कुछ बहुत समय लेने वाला कार्य करता है (मुख्य रूप से बहुत बड़े डेटा आकार के लिए डेटाबेस लेखन)। चूंकि रिसीवर को कार्य को पूरा करने में बहुत लंबा समय लगता है और फिर कतार में अगला संदेश पुनर्प्राप्त करता है, प्रेषक कतार को जल्दी भरना जारी रखेगा। तो मेरा सवाल यह है: क्या इससे संदेश कतार बहती है?खरगोश एमक्यू: तेजी से निर्माता और धीमी उपभोक्ता
संदेश उपभोक्ता ऐसा दिखाई देता है:
public void onMessage() throws IOException, InterruptedException {
channel.exchangeDeclare(EXCHANGE_NAME, "fanout");
String queueName = channel.queueDeclare("allDataCase", true, false, false, null).getQueue();
channel.queueBind(queueName, EXCHANGE_NAME, "");
QueueingConsumer consumer = new QueueingConsumer(channel);
channel.basicConsume(queueName, true, consumer);
while (true) {
QueueingConsumer.Delivery delivery = consumer.nextDelivery();
String message = new String(delivery.getBody());
System.out.println(" [x] Received '" + message + "'");
JSONObject json = new JSONObject(message);
String caseID = json.getString("caseID");
//following takes very long time
dao.saveToDB(caseID);
}
}
उपभोक्ता द्वारा प्राप्त प्रत्येक संदेश एक caseID शामिल हैं। प्रत्येक केस आईडी के लिए, यह डेटाबेस में बड़ी मात्रा में डेटा बचाएगा, जो बहुत लंबा समय लेता है। वर्तमान में केवल एक उपभोक्ता रब्बीएमक्यू के लिए स्थापित किया गया है क्योंकि उत्पादक/उपभोक्ता केस आईडी के प्रकाशित/सदस्यता के लिए एक ही कतार का उपयोग करता है। तो मैं उपभोक्ता थ्रूपुट को कैसे बढ़ा सकता हूं ताकि उपभोक्ता निर्माता के साथ पकड़ सके और कतार में संदेश ओवरफ्लो से बच सके? क्या मुझे खपत दर में तेजी लाने के लिए उपभोक्ता हिस्से में मल्टीथ्रेडिंग का उपयोग करना चाहिए? या मुझे आने वाले संदेश को एक साथ उपभोग करने के लिए एकाधिक उपभोक्ताओं का उपयोग करना चाहिए? या उपभोक्ता को संदेश को असीमित रूप से पूरा करने के इंतजार किए बिना उपभोग करने का कोई असीमित तरीका है? किसी भी सुझाव का स्वागत है।
[RabbitMQ के दस्तावेज़ीकरण] से (http://www.rabbitmq.com/tutorials/tutorial-three-python.html), यहां दो दृष्टिकोण हैं: कार्यकर्ता कतार, प्रकाशित/सदस्यता लें। मैं अभी पब/उप मॉडल का उपयोग कर रहा हूँ। क्या मुझे कई उपभोक्ताओं के लिए कार्यकर्ता कतार का उपयोग करना चाहिए? – tonga
आपको जो चाहिए वह इसके लिए कार्यकर्ता कतार होना चाहिए। इस प्रकार इसे कार्यान्वित किया जा सकता है https://github.com/victorpictor/Hotel/blob/master/Infrastructure/MessageTransport/Receivers/Subscriber.cs#L29 – voutrin
लेकिन यदि मैं विभिन्न उद्देश्यों के लिए कई कतारों का उपयोग करना चाहता हूं तो क्या होगा? अभी केससीड संदेश के लिए केवल एक कतार है। केसआईडी के अलावा अन्य डेटा हो सकता है। तो मुझे एकाधिक कतारों के लिए प्रकाशित/सब्सक्राइब मॉडल का उपयोग करने की आवश्यकता हो सकती है। – tonga