ตัวเลือกคิวข้อความที่ดีสำหรับ nodejs คืออะไร? [ปิด]


112

ต้องการใช้คิวข้อความในเว็บแอปขนาดเล็กที่ฉันกำลังสร้างด้วย node.js ฉันดู resque แต่ไม่แน่ใจว่าเหมาะสม เป้าหมายคือการแจ้งเตือนไปยังไคลเอนต์ตามแบ็กเอนด์และการดำเนินการอื่น ๆ ของไคลเอ็นต์ด้วย socketio ฉันสามารถทำได้ด้วยเพียงแค่ซ็อกเก็ต แต่ฉันคิดว่าคิวข้อความที่เหมาะสมอาจทำให้สิ่งนี้สะอาดขึ้นและฉันจะไม่ต้องสร้างวงล้อใหม่

มีตัวเลือกอะไรบ้าง?


2
ไม่แน่ใจ แต่ดูเหมือนว่าโหนดบางอย่างจะทำได้ดีด้วยตัวเอง!
TK-421

คุณอาจตระหนักถึงเรื่องนี้แล้ว แต่มีหนึ่งระบุไว้ในหน้าโมดูลgithub.com/ry/node/wiki/modules#message-queue ฉันเดาว่ามีค่าใช้จ่ายสำหรับเวลาในการพัฒนาของคุณเองเสมอ
TK-421

5
@ TK-421 และ Bjorn Tipling นั่นเป็นสิ่งที่โหนดสามารถทำเองได้ตราบใดที่คุณมีกระบวนการโหนดเดียว จำเป็นต้องใช้โซลูชันภายนอกเช่น Redis หากคุณมีกระบวนการที่แตกต่างกันสำหรับส่วนต่างๆของแอปพลิเคชันของคุณ (เช่นเว็บเซิร์ฟเวอร์ผู้ให้บริการตรวจสอบสิทธิ์ศูนย์การแจ้งเตือนเป็นต้น) และแน่นอนคุณสามารถเชื่อมต่อกับกระบวนการที่ไม่ใช่โหนดได้เช่นกัน
Louis Chatriot

1
ตัวอย่างการใช้ Node AMQ และ Rabbit MQ (Producer) gist.github.com/DarcInc/9641557และ (Consumer) gist.github.com/DarcInc/9641582
ipaul

1
ในกรณีที่คุณต้องการคิวในหน่วยความจำคุณสามารถพิจารณาโซลูชันที่ใช้ rxjs
Marinos An

คำตอบ:


51

คุณสามารถใช้redisกับไคลเอนต์node_redis ที่รวดเร็วทันใจ มันยังมีความหมายของpubsubในตัว


7
ฉันแนะนำให้ใช้โมดูลการจัดคิวที่ดีที่ด้านบนของ redis เช่นเดียวกับ RSMQ ซึ่งดูเหมือนจะค่อนข้างง่าย npmjs.com/package/rsmq
Exinferis

หากคุณต้องการเพียงแค่พลังของการส่งข้อความโดยไม่มีปัญหาทางเทคนิคเข้ามาคุณสามารถลองnode-ts.github.io/bus
Andrew dh

12

คุณสามารถใช้โหนดลูกค้า STOMP สิ่งนี้จะช่วยให้คุณรวมเข้ากับคิวข้อความต่างๆ ได้แก่ :

  • ActiveMQ
  • RabbitMQ
  • HornetQ

ฉันไม่เคยใช้ห้องสมุดนี้มาก่อนดังนั้นฉันจึงไม่สามารถรับรองคุณภาพได้ แต่ STOMP เป็นโปรโตคอลที่ค่อนข้างเรียบง่ายดังนั้นฉันจึงสงสัยว่าคุณสามารถแฮ็คเพื่อส่งได้หากจำเป็น

อีกตัวเลือกหนึ่งคือการใช้beanstalkd กับโหนด beanstalkd เป็น "คิวงาน" ที่รวดเร็วมากซึ่งเขียนด้วยภาษา C ซึ่งดีมากหากคุณไม่ต้องการความยืดหยุ่นของคุณสมบัติของโบรกเกอร์ที่ระบุไว้ข้างต้น


10

ปลั๊กไร้ยางอาย: ฉันกำลังทำงานกับBokeh : คิวงานที่เรียบง่ายปรับขนาดได้และรวดเร็วอย่างเห็นได้ชัดสร้างขึ้นจาก ZeroMQ รองรับการจัดเก็บข้อมูลแบบเสียบได้สำหรับงานที่ยังคงอยู่รองรับหน่วยความจำ Redis และ Riak ในปัจจุบัน ลองดูสิ


10

นี่คือคำแนะนำสองสามข้อที่ฉันสามารถทำได้:

node-amqp : ไคลเอนต์ RabbitMQ ที่ฉันประสบความสำเร็จในการใช้ร่วมกับ Socket.IO เพื่อสร้างเกมผู้เล่นหลายคนแบบเรียลไทม์และแอปพลิเคชั่นแชทเหนือสิ่งอื่นใด ดูเหมือนน่าเชื่อถือเพียงพอ

zeromq.node : หากคุณต้องการไปตามเส้นทางที่ไม่ใช่นายหน้าสิ่งนี้อาจคุ้มค่าที่จะดู ทำงานมากขึ้นในการใช้งานฟังก์ชัน แต่มีแนวโน้มที่จะได้รับเวลาแฝงที่ต่ำลงและปริมาณงานที่สูงขึ้น


1
+1 เมื่อใช้ ZeroMQ หลังจากการค้นคว้าและใช้เวลามากมายในการซ่อมแซมฝักถั่ว RabbitMQ, BeeQueue, Bull และ Kue ZeroMQ กลายเป็นประสบการณ์ที่ดีที่สุดสำหรับฉันโดยเฉพาะอย่างยิ่งสำหรับโครงการที่มีน้ำหนักเบาซึ่งขับเคลื่อนโดยคนงาน มันเร็วมากและเอกสารประกอบก็ยอดเยี่ยม นอกจากนี้ยังมีประโยชน์เพิ่มเติมในการไม่อุดตันเซิร์ฟเวอร์ Redis ของคุณด้วยการโทรจำนวนมาก
dimiguel

zeromq.nodeตอนนี้ดูแลอยู่ที่นี่: zeromq.js
Marinos

8

ดูnode-busmqซึ่งเป็นเกรดการผลิตบัสข้อความที่พร้อมใช้งานสูงและปรับขนาดได้ซึ่งสนับสนุนโดย redis

ฉันเขียนโมดูลนี้สำหรับระบบคลาวด์ทั่วโลกของเราและปัจจุบันได้ใช้งานในสภาพแวดล้อมการผลิตของเราในศูนย์ข้อมูลหลายแห่งทั่วโลก รองรับคิวที่มีชื่อการสื่อสารแบบเพียร์ทูเพียร์การรับประกันการส่งมอบและการรวมศูนย์

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับสาเหตุที่เราสร้างโมดูลนี้คุณสามารถอ่านโพสต์บล็อกนี้: All Aboard The Message Bus


6

kueเป็นคิวข้อความเดียวที่คุณต้องการ


27
ยกเว้น kue ไม่ได้รับการดูแลอย่างดีมีปัญหาหลายประการและไม่ใช่การทดสอบครั้งเดียว!
vvo

4
นอกจากนี้ยังเป็นคิวงานไม่ใช่คิวข้อความ
HyderA

มีปัญหาหลายประการและไม่เหมาะสมสำหรับการผลิต
Rahul Kumar

1
การใช้งานbullตรงไปตรงมาสำหรับฉันมากขึ้น ด้วยkueฉันหลงทางในเอกสาร
Marinos

5

ฉันแนะนำให้ลองKestrelมันเร็วและง่ายเหมือน Beanstalk แต่รองรับคิวแฟนเอาท์ พูด memcached สร้างขึ้นโดยใช้ Scala และใช้ที่ Twitter


7
เป็นที่น่าสังเกตว่า Kestrel ไม่ได้อยู่ในการพัฒนาอีกต่อไป
GordyD

3

คุณอาจต้องการดู

Redis Simple Message Queue สำหรับ Node.js

ซึ่งใช้ Redis และนำเสนอคุณสมบัติส่วนใหญ่ของ Amazons SQS


1
แม้ว่า RSMQ จะดีและทำงานให้ฉันในการผลิตครั้งหนึ่ง แต่โปรดทราบว่ามันใช้สคริปต์ Lua ใน Redis และจะไม่ทำงานกับการตั้งค่าคลัสเตอร์ / Sentinel ของ Redis
60


1

ดูโหนดคิว lib บางทีก็เพียงพอแล้วที่คุณ สนับสนุน node.js และเบราว์เซอร์ มีกลยุทธ์การจัดส่งสองแบบ: การออกอากาศและการหมุนเวียน จาวาสคริปต์เท่านั้น

ตัวอย่างด่วน:

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 กับ socketIO เหมือนที่คุณอธิบายไว้ ฉันเก็บ socketID ไว้กับงานและสามารถเรียกคืนได้ใน Job Complete .. KUE ขึ้นอยู่กับ redis และมีตัวอย่างที่ดีใน github

อะไรทำนองนี้ ....

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();
}

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.