node.js - ¿Cuáles son las buenas opciones de cola de mensajes para nodejs?
redis message queue (12)
¿Qué tal Azure ServiceBus? Es compatible con nodejs.
Buscando usar una cola de mensajes en una pequeña aplicación web que estoy construyendo con node.js. Miré resque pero no estoy seguro de que sea apropiado. El objetivo es enviar notificaciones a los clientes basadas en backend y otras acciones del cliente con socketio. Podría hacer esto solo con socketio, pero pensé que tal vez una cola de mensajes adecuada lo haría más limpio y no tendría que reinventar la rueda.
¿Cuáles son las opciones por ahí?
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 una aplicación de juego y chat multijugador en tiempo real, entre otras cosas. Parece lo suficientemente confiable.
zeromq.node : si quieres ir por la ruta no intermediada, 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 una mayor rentabilidad.
Eche un vistazo a node-busmq : es un bus de mensajes de nivel de producción, altamente disponible y escalable respaldado por redis.
Escribí este módulo para nuestra nube global y actualmente está implementado en nuestro entorno de producción en varios centros de datos de todo el mundo. Admite colas con nombre, comunicación punto a punto, entrega garantizada y federación.
Para obtener más información sobre por qué creamos este módulo, puede leer esta publicación de blog: Todos a bordo del Bus de mensajes
Enchufe desvergonzado: estoy trabajando en Bokeh : una cola de tareas simple, escalable y rápida construida en ZeroMQ. Admite almacenes de datos conectables para tareas persistentes, actualmente en memoria, Redis y Riak son compatibles. Echale un vistazo.
Es posible que desee echar un vistazo a
Que usa Redis y ofrece la mayoría de las funciones de Amazons SQS.
Mire node-queue-lib . Tal vez es suficiente que usted. Es compatible con node.js y navegadores. Tiene dos estrategias de entrega: difusión 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'');
Puede usar el cliente STOMP del nodo. 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 puede piratearlo para enviarlo si es necesario.
Otra opción es usar beanstalkd con nodo . beanstalkd es una "cola de tareas" muy rápida escrita en C que es muy buena si no necesita la flexibilidad característica de los intermediarios mencionados anteriormente.
Recomiendo probar Kestrel , es rápido y simple como Beanstalk, pero admite colas de fanouts. Habla memcached. Está construido con Scala y se usa en Twitter.
También puedes echar un vistazo a ewd-qoper8: https://github.com/robtweed/ewd-qoper8
Usé KUE con socketIO como lo describiste. Guardé el ID de socket con el trabajo y pude recuperarlo en el trabajo completo. KUE se basa en redis y tiene kue
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(); }
podrías usar redis con el cliente node_redis rapidísimo. Incluso tiene pubsub semántica pubsub .
kue es la única cola de mensajes que necesitarías