Какие хорошие параметры очереди сообщений для 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');
вы также можете проверить ewd-qoper8:https://github.com/robtweed/ewd-qoper8