नोडज के लिए अच्छे संदेश कतार विकल्प क्या हैं? [बन्द है]


112

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

वहाँ क्या विकल्प हैं?


2
यकीन नहीं हो रहा है, लेकिन ऐसा लगता है कि कुछ नोड अपने आप ही अच्छा करेंगे!
TK-421

आप शायद इस बारे में पहले से ही अवगत हैं, लेकिन मॉड्यूल पृष्ठ पर सूचीबद्ध एक है: github.com/ry/node/wiki/modules#message-queue । मुझे लगता है कि विचार करने के लिए हमेशा आपके खुद के विकास समय की लागत होती है।
TK-421

5
@ TK-421 और ब्योर्न टिपलिंग वास्तव में कुछ नोड ही कर सकते हैं, जब तक कि आपके पास केवल एक नोड प्रक्रिया हो। यदि आपके आवेदन के विभिन्न भागों (जैसे वेबसर्वर, ऑर्थर प्रोवाइडर, नोटिफ़ सेंटर इत्यादि) के लिए अलग-अलग प्रक्रियाएँ हैं तो रेडिस जैसे बाहरी समाधान की आवश्यकता है। और निश्चित रूप से आप तब भी गैर नोड प्रक्रियाओं के साथ जुड़ सकते हैं।
लुइस चेट्रिएट

1
नोड एएमक्यू और खरगोश एमक्यू (निर्माता) gist.github.com/DarcInc/9641557 और (उपभोक्ता) gist.github.com/DarcInc/9641582
ipulul

1
यदि आपको एक इन-मेमोरी कतार की आवश्यकता है, तो आप इस rxjs- आधारित समाधान पर
मैरिनो

जवाबों:


51

आप बिजली की तेज़ नोड_रेडिस क्लाइंट के साथ रेडिस का उपयोग कर सकते हैं । इसमें बिल्ट-इन पबसूब शब्दार्थ भी है।


7
मैं RSMQ की तरह, रेडिस के शीर्ष पर एक अच्छा कतारबद्ध मॉड्यूल का उपयोग करने की सलाह देता हूं, जो कि बहुत सरल लगता है। npmjs.com/package/rsmq
Exinferis

यदि आप अभी तकनीकी चिंता के बिना संदेश भेजने की शक्ति चाहते हैं तो आप नोड की
एंड्रयू डीएच

12

आप नोड STOMP क्लाइंट का उपयोग कर सकते हैं । यह आपको विभिन्न प्रकार की संदेश कतारों के साथ एकीकृत करने देगा:

  • ActiveMQ
  • RabbitMQ
  • HornetQ

मैंने पहले इस पुस्तकालय का उपयोग नहीं किया है, इसलिए मैं इसकी गुणवत्ता के लिए प्रतिज्ञा नहीं कर सकता। लेकिन STOMP एक बहुत ही सरल प्रोटोकॉल है इसलिए मुझे संदेह है कि यदि आवश्यक हो तो आप इसे सबमिट कर सकते हैं।

एक और विकल्प नोड के साथ बीनस्टॉक का उपयोग करना है । beanstalkd, C में लिखा गया एक बहुत तेज़ "कार्य कतार" है जो बहुत अच्छा है अगर आपको ऊपर सूचीबद्ध दलालों के सुविधा लचीलेपन की आवश्यकता नहीं है।


10

बेशर्म प्लग: मैं पर काम कर रहा हूँ Bokeh : एक सरल, स्केलेबल और प्रज्वलन तेजी से कार्य ZeroMQ पर बनाया कतार। यह वर्तमान में मेमोरी, रेडिस और रिआक को समर्थित कार्यों के लिए प्लग करने योग्य डेटा स्टोर का समर्थन करता है। इसकी जांच - पड़ताल करें।


10

यहाँ कुछ सिफारिशें दी गई हैं:

नोड- amqp : एक RabbitMQ क्लाइंट जिसे मैंने एक वास्तविक समय मल्टी प्लेयर गेम बनाने और अन्य चीजों के बीच चैट एप्लिकेशन बनाने के लिए सॉकेट.आईओ के साथ सफलतापूर्वक उपयोग किया है। विश्वसनीय लगता है।

zeromq.node : यदि आप बिना ब्रोक वाले मार्ग से नीचे जाना चाहते हैं तो यह देखने लायक हो सकता है। कार्यक्षमता को लागू करने के लिए अधिक काम लेकिन कम विलंबता और उच्च थ्रूपुट प्राप्त करने की आपकी अधिक संभावना है।


1
ZeroMQ का उपयोग करने पर +1। बीनस्टॉक, रैबिटएमक्यू, बीक्यूक्यू, बुल और क्यू के साथ बहुत सारे शोध और समय बिताने के बाद, जीरोएमक्यू मेरे लिए सबसे अच्छा अनुभव रहा, खासकर श्रमिकों द्वारा संचालित हल्के परियोजनाओं के लिए। यह तेज़ है और प्रलेखन शीर्ष पायदान पर है। इसमें बड़ी मात्रा में कॉल के साथ अपने Redis सर्वर को बंद न करने का अतिरिक्त लाभ भी है।
dimiguel

zeromq.nodeअब यहां बनाए रखा गया है: zeromq.js
मैरिनो

8

नोड- Busmq पर एक नज़र डालें - यह एक उत्पादन ग्रेड है, अत्यधिक उपलब्ध और स्केलेबल संदेश बस है जो रेडिस द्वारा समर्थित है।

मैंने इस मॉड्यूल को हमारे वैश्विक क्लाउड के लिए लिखा है और यह वर्तमान में दुनिया भर के कई डेटाटेकरों में हमारे उत्पादन वातावरण में तैनात है। यह नामित कतारों, सहकर्मी से सहकर्मी संचार, गारंटीकृत वितरण और महासंघ का समर्थन करता है।

इस मॉड्यूल को बनाने के बारे में अधिक जानकारी के लिए आप इस ब्लॉग पोस्ट को पढ़ सकते हैं: ऑल एबोर्ड द मैसेज बस


6

क्यू केवल संदेश कतार है जिसे आपको कभी भी आवश्यकता होगी


27
क्यू को छोड़कर अच्छी तरह से बनाए रखा नहीं है, कई मुद्दों और एक भी परीक्षण नहीं है!
vvo

4
इसके अलावा, यह एक नौकरी कतार है - संदेश कतार नहीं
हैडर

इसके कई मुद्दे हैं और उत्पादन के लिए फिट नहीं है
राहुल कुमार

1
उपयोग करना bullमेरे लिए अधिक सीधा था। के साथ kueमैं प्रलेखन में खो गया था।
मैरिनो एक

5

मैं Kestrel की कोशिश करने की सलाह देता हूं , यह बीनस्टॉक के रूप में तेज़ और सरल है, लेकिन प्रशंसक कतार का समर्थन करता है। बोलती है मेम। यह स्काला का उपयोग कर बनाया गया है और ट्विटर पर उपयोग किया जाता है।


7
यह ध्यान देने योग्य है कि Kestrel अब सक्रिय विकास में नहीं है।
गॉर्डिएड

3

आप पर एक नज़र रखना चाहते हो सकता है

Node.js के लिए Redis सरल संदेश कतार

जो Redis का उपयोग करता है और Amazons SQS की अधिकांश विशेषताएं प्रदान करता है।


1
जबकि RSMQ अच्छा है और एक बार उत्पादन में मेरे लिए काम कर रहा है, ध्यान रखें कि यह Redis में Lua स्क्रिप्ट का उपयोग कर रहा है और Redis क्लस्टर / प्रहरी सेटअप के साथ काम नहीं करेगा
naugtur

2

कैसे Azure ServiceBus के बारे में? यह नोडज का समर्थन करता है।


1

को देखो नोड कतार-लिब । शायद यह पर्याप्त है कि आप। यह नोड.जेएस और ब्राउज़र का समर्थन करता है। दो वितरण रणनीतियाँ हैं: प्रसारण और राउंड-रॉबिन। केवल जावास्क्रिप्ट।

त्वरित उदाहरण:

var Queue = require('node-queue-lib/queue.core');

var queue = new Queue('Queue name', 'broadcast');

// subscribe on 'Queue name' messages
queue.subscribe(function (err, subscriber) {
    subscriber.on('error', function(err){
        //
    });
    subscriber.on('data', function (data, accept) {
        console.log(data);
        accept(); // accept process message
    });
});

// publish message
queue.publish('test');

1

मैंने आपके द्वारा वर्णित सॉकेटियो के साथ KUE का उपयोग किया। मैंने जॉब के साथ सॉकेट को स्टोर किया और फिर उसे जॉब कम्प्लीट में रीट्रीव कर सकता था .. KUE रेडिस पर आधारित है और इसके गितुब पर अच्छे उदाहरण हैं

कुछ इस तरह....

jobs.process('YourQueuedJob',10, function(job, done){
    doTheJob(job, done);
});


function doTheJob(job, done){
    var socket = io.sockets.sockets[job.data.socketId];
    try {
        socket.emit('news', { status : 'completed' , task : job.data.task });
    } catch(err){
        io.sockets.emit('news', { status : 'fail' , task : job.data.task , socketId: job.data.socketId});
    }
    job.complete();
}

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.