Какие хорошие параметры очереди сообщений для nodejs? [закрытый]

хотите использовать очередь сообщений в небольшом веб-приложении, которое я создаю с узлом.js. Я посмотрела на Реска, но не была уверена, что это уместно. Цель состоит в том, чтобы отправлять уведомления клиентам на основе бэкэнда и других действий клиента с socketio. Я мог бы сделать это только с socketio, но я подумал, что, возможно, правильная очередь сообщений сделает это чище, и мне не придется изобретать колесо.

какие есть варианты?

12 ответов


можно использовать redis с молниеносной node_redis клиент. Он даже имеет встроенный pubsub семантика.


вы можете использовать узел топать клиента. Это позволит вам интегрироваться с различными очередями сообщений, включая:

  • в частности, ActiveMQ
  • RabbitMQ
  • HornetQ

Я не использовал эту библиотеку раньше, поэтому я не могу поручиться за ее качество. Но STOMP-довольно простой протокол, поэтому я подозреваю, что вы можете взломать его в случае необходимости.

другой вариант-использовать beanstalkd с узла. beanstalkd-это очень быстрая "очередь задач", написанная на C, что очень хорошо, если вам не нужна гибкость функций брокеров, перечисленных выше.


бесстыдная вилка: я работаю над размытие: простая, масштабируемая и быстрая очередь задач, построенная на ZeroMQ. Он поддерживает подключаемые хранилища данных для сохраняющихся задач, в настоящее время в памяти поддерживаются Redis и Riak. Проверить его.


посмотри узел-busmq - это производственная шина, высокодоступная и масштабируемая шина сообщений, поддерживаемая redis.

Я написал этот модуль для нашего глобального облака, и в настоящее время он развернут в нашей производственной среде в нескольких центрах обработки данных по всему миру. Он поддерживает именованные очереди, одноранговую связь, гарантированную доставку и федерацию.

для получения дополнительной информации о том, почему мы создали этот модуль вы можете прочитать этот пост в блог: все На Борту Автобуса Сообщений


вот несколько рекомендаций, которые я могу сделать:

узел-amqp: клиент RabbitMQ, который я успешно использовал в сочетании с сокетом.IO, чтобы сделать многопользовательскую игру в реальном времени и чат-приложение среди прочего. Кажется достаточно надежным.

zeromq.узел: если вы хотите спуститься по маршруту без посредников, это может стоить посмотреть. Больше работы для реализации функциональности, но с большей вероятностью получите меньшую задержку и выше пропускная способность.


Я рекомендую попробовать Пустельга, это быстро и просто, как бобовый стебель, но поддерживает очереди разветвителя. Говорит как memcached. Он построен с использованием Scala и используется в Twitter.


КУЕ - единственная очередь сообщений, которая вам когда-либо понадобится


возможно, вы захотите взглянуть на

Redis простая очередь сообщений для узла.js

который использует Redis и предлагает большинство функций амазонок SQS.


я использовал KUE с socketIO, как вы описали. Я сохранил socketID с работой, а затем мог бы восстановить его в работе.. КУЭ основан на 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();
}

посмотреть узел-очередь-lib. Возможно, этого достаточно. Это узел поддержки.JS и браузеров. Имеет две стратегии доставки: широковещательную и круговую. Только javascript.

пример:

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

Как насчет Azure ServiceBus? Он поддерживает nodejs.


вы также можете проверить ewd-qoper8:https://github.com/robtweed/ewd-qoper8