2011-01-15 3 views
91

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

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

+2

Не уверен, но это, кажется, как-то узел будет хорошо себя вести! –

+1

Я тоже думал об этом. –

+0

Возможно, вы уже знаете об этом, но есть страница, указанная на странице «Модули»: https://github.com/ry/node/wiki/modules#message-queue. Наверное, всегда стоит учитывать стоимость вашего собственного времени разработки. –

ответ

41

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

+2

Это работает. Теперь прочитайте документы redis. : O –

+5

Я рекомендую использовать хороший модуль очередей поверх redis, как RSMQ, который кажется довольно простым. https://www.npmjs.com/package/rsmq – Exinferis

11

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

  • ActiveMQ
  • RabbitMQ
  • HornetQ

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

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

5

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

+4

Стоит отметить, что Kestrel больше не находится в активном развитии. – GordyD

10

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

+2

Последний бой был чуть более года назад. Используется ли Bokeh или он уступил место другим решениям? –

6

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

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

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

5

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

+21

за исключением kue не в хорошем состоянии, имеет несколько проблем и ни одного теста! – vvo

+4

Кроме того, это очередь заданий - не очередь сообщений – HyderA

1

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

Посмотрите на 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'); 
3

Вы можете посмотреть на

Redis Simple Message Queue for Node.js

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

+0

В то время как RSMQ хорош и работает для меня в производстве один раз, имейте в виду, что он использует сценарии Lua в Redis и не будет работать с настройкой кластера/отправителя Redis. – naugtur

0

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

7

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

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

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