2011-01-15 15 views
91

Ich möchte eine Nachrichtenwarteschlange in einer kleinen Webanwendung verwenden, die ich mit node.js erstelle. Ich schaute auf Resque, aber nicht sicher, ob das angemessen ist. Das Ziel besteht darin, Benachrichtigungen an Clients basierend auf Backend- und anderen Clientaktionen mit socketio zu senden. Ich könnte das mit nur socketio tun, aber ich dachte, vielleicht würde eine richtige Nachrichtenwarteschlange das sauberer machen und ich würde das Rad nicht neu erfinden müssen.Was sind gute Nachrichtenwarteschlangenoptionen für nodejs?

Welche Möglichkeiten gibt es da draußen?

+2

nicht sicher, aber dies scheint wie etwas Knoten würde mach es gut! –

+1

Ich dachte das auch. –

+0

Das ist Ihnen wahrscheinlich schon bekannt, aber auf der Modules-Seite ist eins aufgeführt: https://github.com/ry/node/wiki/modules#message-queue. Ich schätze, es sind immer die Kosten für die eigene Entwicklungszeit zu berücksichtigen. –

Antwort

41

Sie redis mit dem blitzschnellen node_redis Client nutzen könnten. Es hat sogar eine eingebaute pubsub Semantik.

+2

Das funktioniert. Jetzt lesen Sie die Rediskurse. : O –

+5

Ich empfehle ein gutes Warteschlangenmodul auf Redis zu verwenden, genau wie RSMQ, was ziemlich einfach zu sein scheint. https://www.npmjs.com/package/rsmq – Exinferis

11

Sie könnten den Knoten STOMP client verwenden. Dies würde Sie mit einer Vielzahl von Nachrichtenwarteschlangen integrieren, einschließlich:

  • ActiveMQ
  • RabbitMQ
  • HornetQ

ich diese Bibliothek nicht verwendet haben, so kann ich nicht bürgen seine Qualität. Aber STOMP ist ein ziemlich einfaches Protokoll, also vermute ich, dass Sie es bei Bedarf in die Einreichung hacken können.

Eine weitere Option ist beanstalkd with node zu verwenden. Beanstalkd ist eine sehr schnelle "Task Queue", geschrieben in C, die sehr gut ist, wenn Sie die Feature-Flexibilität der oben genannten Broker nicht benötigen.

5

ich Kestrel empfehlen daher, ist es schnell und einfach wie Bohnenstange, sondern unterstützt Fanout-Warteschlangen. Spricht Memcached. Es wird mit Scala erstellt und bei Twitter verwendet.

+4

Es ist erwähnenswert, dass Kestrel nicht mehr in der aktiven Entwicklung ist. – GordyD

10

Shameless Stecker: Ich arbeite an Bokeh: eine einfache, skalierbare und blitzschnelle Task-Queue auf ZeroMQ gebaut. Es unterstützt steckbare Datenspeicher für persistente Aufgaben, derzeit im Speicher, Redis und Riak werden unterstützt. Hör zu.

+2

Das letzte Commit war vor etwas mehr als einem Jahr. Ist Bokeh in Gebrauch oder hat es anderen Lösungen Platz gemacht? –

6

Hier ein paar Empfehlungen kann ich machen:

node-amqp: Ein RabbitMQ Client, die ich erfolgreich in Kombination mit Socket.IO verwendet habe Multi-Player-Spiel in Echtzeit und unter anderem Chat-Anwendung zu machen. Scheint zuverlässig genug.

zeromq.node: Wenn Sie den nicht vermittelten Weg gehen wollen, dies könnte einen Blick wert sein. Mehr Arbeit, um Funktionalität zu implementieren, aber Ihre Wahrscheinlichkeit, niedrigere Latenz und höher zu bekommen, ist höher.

5

kue ist die einzige Nachrichtenwarteschlange Sie jemals

brauchen würde
+21

außer Ku ist nicht gut gepflegt, hat mehrere Probleme und keinen einzigen Test! – vvo

+4

Es ist auch eine Job-Warteschlange - keine Nachrichtenwarteschlange – HyderA

1

ich KUE mit socketIO verwendet wie Sie beschrieben. ich die SocketId mit dem Job gespeichert und können dann in der Complete Job retreive .. KUE auf redis basiert und good examples on github

so etwas wie dieses ....

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

Schauen Sie sich node-queue-lib an. Vielleicht reicht es dir. Es unterstützt node.js und Browser. Verfügt über zwei Übertragungsstrategien: Broadcast und Round-Robin. Nur Javascript.

Schnell Beispiel:

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'); 
3

Sie vielleicht einen Blick auf

Redis Simple Message Queue for Node.js

haben wollen Welche Redis verwendet und bietet die meisten Funktionen der Amazonen SQS.

+0

Während RSMQ ist schön und hat für mich in der Produktion einmal funktioniert, beachten Sie, dass es Lua Skripte in Redis verwendet und nicht mit Redis Cluster/Sentinel-Setup – naugtur

0

Wie wäre es mit Azure ServiceBus? Es unterstützt nodejs.

7

Werfen Sie einen Blick auf node-busmq - es ist ein hochverfügbarer und skalierbarer Nachrichtenbus in Produktionsqualität, der von Redis unterstützt wird.

Ich habe dieses Modul für unsere globale Cloud geschrieben und es wird derzeit in unserer Produktionsumgebung in mehreren Rechenzentren auf der ganzen Welt eingesetzt. Es unterstützt named Warteschlangen, Peer-to-Peer-Kommunikation, garantierte Zustellung und Föderation.

Weitere Informationen darüber, warum wir dieses Modul erstellt Ihnen dieses Blog-Post lesen: All Aboard The Message Bus

Verwandte Themen