¿Cuáles son las buenas opciones de cola de mensajes para nodejs? [cerrado]


Estoy buscando usar una cola de mensajes en una pequeña aplicación web que estoy construyendo con node.js. Miré a Resque pero no estoy seguro de que sea apropiado. El objetivo es enviar notificaciones a los clientes basadas en el backend y otras acciones del cliente con socketio. Podría hacer esto con solo socketio, pero pensé que tal vez una cola de mensajes adecuada haría esto más limpio y no tendría que reinventar la rueda.

¿Cuáles son las opciones que hay?

Author: Johann Philipp Strathausen, 2011-01-15

12 answers

Puedes usar redis con el cliente lightning fast node_redis. Incluso tiene semántica incorporada pubsub.

 43
Author: Alfred,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:10:46

Podría usar el nodo cliente STOMP. Esto le permitiría integrarse con una variedad de colas de mensajes que incluyen:

  • ActiveMQ
  • RabbitMQ
  • HornetQ

No he usado esta biblioteca antes, así que no puedo responder por su calidad. Pero STOMP es un protocolo bastante simple, así que sospecho que puedes hackearlo para que se someta si es necesario.

Otra opción es usar beanstalkd con node. beanstalkd es una "cola de tareas" muy rápida escrita en C eso es muy bueno si no necesita la flexibilidad de las funciones de los corredores enumerados anteriormente.

 11
Author: James Cooper,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-15 17:28:41

Shameless plug: Estoy trabajando en Bokeh: una cola de tareas sencilla, escalable y ultrarrápida construida sobre ZeroMQ. Admite almacenes de datos conectables para tareas persistentes, actualmente en memoria, se admiten Redis y Riak. Compruébelo.

 10
Author: Josh Bassett,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-25 03:38:52

Echa un vistazo a node-busmq - es un bus de mensajes de grado de producción, altamente disponible y escalable respaldado por redis.

Escribí este módulo para nuestra nube global y actualmente se implementa en nuestro entorno de producción en varios centros de datos de todo el mundo. Soporta colas con nombre, comunicación peer-to-peer, entrega garantizada y federación.

Para obtener más información sobre por qué creamos este módulo, puede leer esta entrada del blog: Todos a bordo Del Mensaje Bus

 8
Author: fujifish,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-16 06:40:43

Aquí hay un par de recomendaciones que puedo hacer:

Node-amqp: Un cliente RabbitMQ que he utilizado con éxito en combinación con Socket.IO para hacer un juego multijugador en tiempo real y aplicación de chat entre otras cosas. Parece bastante confiable.

Zeromq.node: Si quieres ir por la ruta sin intermediarios, vale la pena echarle un vistazo. Más trabajo para implementar la funcionalidad, pero es más probable que obtenga una latencia más baja y un mayor rendimiento.

 7
Author: RobotEyes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-08 08:58:52

Recomiendo probar Kestrel, es rápido y simple como habichuelas mágicas, pero admite colas de fanout. Habla memcached. Está construido usando Scala y utilizado en Twitter.

 5
Author: Eduardo Raad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-30 05:29:06

Kue es la única cola de mensajes que necesitarías

 5
Author: Pono,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-15 23:36:25

Es posible que desee echar un vistazo a

Redis Simple Message Queue for Node.js

Que utiliza Redis y ofrece la mayoría de las características de Amazons SQS.

 3
Author: Smrchy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-19 12:08:06

Usé KUE con SocketIO como describiste. Guardé el calcetÍN con el trabajo y luego pude retirarlo en el Trabajo Completo.. KUE se basa en redis y tiene buenos ejemplos en github

Algo como esto....

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();
}
 1
Author: Brian McAuliffe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-01 08:01:03

Mira node-queue-lib. Tal vez es suficiente que usted. Nodo de soporte de ti.js y navegadores. Tiene dos estrategias de entrega: broadcast y round-robin. Solo javascript.

Ejemplo rápido:

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');
 0
Author: AndyGrom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-05-23 20:51:29

¿Qué tal Azure ServiceBus? Es compatible con nodejs.

 0
Author: Ben,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-27 16:05:07

Es posible que también desee revisar ewd-qoper8: https://github.com/robtweed/ewd-qoper8

 0
Author: robtweed,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-29 09:37:59