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

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

Какие существуют варианты?

Ответ 1

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

Ответ 2

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

  • ActiveMQ
  • RabbitMQ
  • HornetQ

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

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

Ответ 3

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

Ответ 4

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

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

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

Ответ 5

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

Ответ 6

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

Ответ 7

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

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

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

Ответ 8

Возможно, вам стоит взглянуть на

Redis Simple Message Queue для Node.js

Использует Redis и предлагает большинство возможностей SQS Amazons.

Ответ 9

Я использовал KUE с socketIO, как вы описали. Я сохранил идентификатор socketID с заданием и затем смог его вернуть в Job Complete. KUE основан на 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();
}

Ответ 10

Посмотрите node-queue-lib. Возможно, этого достаточно. Он поддерживает node.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');

Ответ 11

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