Ответ 1
вы можете использовать redis с молниеносной node_redis. Он даже имеет встроенную pubsub семантику.
Вы хотите использовать очередь сообщений в небольшом веб-приложении, которое я создаю с помощью node.js. Я посмотрел на реск, но не уверен, что это уместно. Цель состоит в том, чтобы направить уведомления клиентам на основе бэкэнд и других действий клиента с помощью socketio. Я мог бы сделать это с помощью только сокета, но я подумал, что, возможно, правильная очередь сообщений сделает это чище, и мне не придется изобретать велосипед.
Какие существуют варианты?
вы можете использовать redis с молниеносной node_redis. Он даже имеет встроенную pubsub семантику.
Вы можете использовать node клиент STOMP. Это позволит вам интегрироваться с различными очередями сообщений, включая:
Я раньше не использовал эту библиотеку, поэтому я не могу ручаться за ее качество. Но STOMP - довольно простой протокол, поэтому я подозреваю, что вы можете его взломать в случае необходимости.
Другой вариант - использовать beanstalkd с node. beanstalkd - очень быстрая "очередь задач", написанная на C, что очень хорошо, если вам не нужна гибкость функций брокеров, перечисленных выше.
Бесстыдный плагин: я работаю над Bokeh: простая, масштабируемая и пылающая очередь задач, построенная на ZeroMQ. Он поддерживает подключаемые хранилища данных для сохраняющихся задач, в настоящее время в памяти, Redis и Riak поддерживаются. Проверьте это.
Вот несколько рекомендаций, которые я могу сделать:
node-amqp: клиент RabbitMQ, который я успешно использовал в сочетании с Socket.IO, чтобы сделать многопользовательскую игру в режиме реального времени и чат-приложение среди других вещей. Кажется достаточно надежным.
zeromq.node: Если вы хотите спуститься по небронированному маршруту, это может стоить взгляда. Больше работы по внедрению функциональности, но вы, скорее всего, получите более низкую задержку и более высокий уровень.
Я рекомендую попробовать Kestrel, это быстро и просто, как Beanstalk, но поддерживает очереди разветвления. Говорит memcached. Он построен с использованием Scala и используется в Twitter.
kue - единственная очередь сообщений, которая вам когда-либо понадобилась
Взгляните на node-busmq - это класс производительности, высокодоступная и масштабируемая шина сообщений, поддерживаемая redis.
Я написал этот модуль для нашего глобального облака и в настоящее время его развертывают в нашей производственной среде в нескольких центрах обработки данных по всему миру. Он поддерживает именованные очереди, одноранговую связь, гарантированную доставку и федерацию.
Для получения дополнительной информации о том, почему мы создали этот модуль, вы можете прочитать это сообщение в блоге: Все на борту Автоответчик
Возможно, вам стоит взглянуть на
Redis Simple Message Queue для Node.js
Использует Redis и предлагает большинство возможностей SQS Amazons.
Я использовал 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(); }
Посмотрите 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');
Как насчет Azure ServiceBus? Он поддерживает nodejs.
Вы также можете проверить ewd-qoper8: https://github.com/robtweed/ewd-qoper8