web-dev-qa-db-fra.com

Quelles sont les bonnes options de file d'attente de messages pour nodejs?

Vous cherchez à utiliser une file de messages dans une petite application Web que je construis avec node.js. J'ai regardé Resque mais je ne suis pas sûr que ce soit approprié. L'objectif consiste à envoyer des notifications aux clients en fonction du backend et d'autres actions du client avec socketio. Je pouvais faire cela avec juste socketio mais je pensais qu'une bonne file de messages rendrait cela plus propre et je n'aurais pas à réinventer la roue.

Quelles sont les options disponibles?

109
Bjorn Tipling

vous pouvez utiliser redis avec le logiciel rapide node_redis client. Il a même intégré pubsub sémantique.

50
Alfred

Vous pouvez utiliser le noeud client STOMP . Cela vous permettrait de vous intégrer à une variété de files de messages, notamment:

  • ActiveMQ
  • RabbitMQ
  • HornetQ

Je n'ai jamais utilisé cette bibliothèque auparavant, je ne peux donc pas en garantir la qualité. Mais STOMP est un protocole assez simple, alors je suppose que vous pouvez le pirater si vous le souhaitez.

Une autre option consiste à utiliser beanstalkd avec noeud . beanstalkd est une "file d'attente" très rapide écrite en C qui est très bonne si vous n'avez pas besoin de la souplesse des fonctionnalités des courtiers énumérés ci-dessus.

12
James Cooper

Prise sans scrupule: je travaille sur Bokeh : une file d'attente de tâches simple, évolutive et ultra-rapide construite sur ZeroMQ. Il prend en charge les magasins de données enfichables pour les tâches persistantes, actuellement en mémoire, Redis et Riak sont pris en charge. Vérifiez-le.

10
Josh Bassett

Voici quelques recommandations que je peux faire:

node-amqp : Un client RabbitMQ que j'ai utilisé avec succès en combinaison avec Socket.IO pour créer, entre autres, un jeu multi-joueurs et une application de discussion en temps réel. Semble assez fiable.

zeromq.node : Si vous souhaitez suivre la route sans intermédiaire, cela peut valoir le coup d’être examiné. Plus de travail est nécessaire pour implémenter les fonctionnalités, mais vous êtes plus susceptible d’obtenir une latence plus faible et un débit plus élevé.

9
RobotEyes

Jetez un coup d'œil à node-busmq - il s'agit d'un bus de messages de qualité production, hautement disponible et évolutif, soutenu par redis.

J'ai écrit ce module pour notre cloud mondial et il est actuellement déployé dans notre environnement de production dans plusieurs centres de données à travers le monde. Il prend en charge les files d'attente nommées, la communication d'égal à égal, la livraison garantie et la fédération.

Pour plus d'informations sur les raisons pour lesquelles nous avons créé ce module, vous pouvez lire ce billet de blog: Tous à bord du message bus

8
fujifish

kue est la seule file d'attente de messages dont vous auriez besoin

6
Pono

Je recommande d'essayer Kestrel , c'est rapide et simple comme Beanstalk mais supporte les files d'attente. Parle memcached. Il est construit en utilisant Scala et utilisé sur Twitter.

5
Eduardo Raad

Vous voudrez peut-être jeter un coup d'œil à

Redis Simple Message Queue for Node.js

Qui utilise Redis et offre la plupart des fonctionnalités d’Amazons SQS.

3
Smrchy

Regardez node-queue-lib . Peut-être qu'il suffit que vous. Il supporte node.js et les navigateurs. A deux stratégies de diffusion: broadcast et round-robin. Seulement javascript.

Exemple rapide:

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
AndyGrom

Que diriez-vous d'Azure ServiceBus? Il supporte les nodejs.

1
Ben

J'ai utilisé KUE avec socketIO comme vous l'avez décrit. J'ai stocké le socketID avec le travail et pourrais ensuite le retrouver dans le travail terminé. KUE est basé sur redis et a bons exemples sur github

quelque chose comme ça....

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
Brian McAuliffe

Vous pouvez également vouloir vérifier ewd-qoper8: https://github.com/robtweed/ewd-qoper8

0
robtweed