Nodejs için iyi mesaj kuyruğu seçenekleri nelerdir? [kapalı]


112

Node.js ile oluşturduğum küçük bir web uygulamasında bir mesaj kuyruğu kullanmak istiyorum Resque'e baktım ama bunun uygun olduğundan emin değilim. Amaç, socketio ile arka uç ve diğer istemci eylemlerine dayalı olarak istemcilere bildirimler göndermektir. Bunu sadece socketio ile yapabilirdim ama uygun bir mesaj kuyruğunun bunu daha temiz yapacağını ve tekerleği yeniden icat etmem gerekmeyeceğini düşündüm.

Orada seçenekler neler?


2
Emin değilim, ancak bu düğümün kendi başına iyi yapacağı bir şey gibi görünüyor!
TK-421

Muhtemelen bunun zaten farkındasınız, ancak Modüller sayfasında listelenen bir tane var: github.com/ry/node/wiki/modules#message-queue . Sanırım her zaman dikkate almanız gereken kendi geliştirme sürenizin maliyeti vardır.
TK-421

5
@ TK-421 ve Bjorn Tipling Bu, yalnızca bir düğüm süreciniz olduğu sürece düğümün kendi başına yapabileceği bir şeydir. Uygulamanızın farklı bölümleri için farklı süreçleriniz varsa (ör. Web sunucusu, yetkilendirme sağlayıcısı, notif merkezi vb.) Redis gibi harici bir çözüme ihtiyaç vardır. Ve tabii ki daha sonra düğüm dışı süreçlere de bağlanabilirsiniz.
Louis Chatriot

1
Node AMQ ve Rabbit MQ (Üretici) gist.github.com/DarcInc/9641557 ve (Tüketici) gist.github.com/DarcInc/9641582
ipaul

1
Bir bellek içi kuyruğa ihtiyacınız olması durumunda, bu rxjs tabanlı çözümü
Marinos An

Yanıtlar:



12

Düğüm STOMP istemcisini kullanabilirsiniz . Bu, aşağıdakiler dahil çeşitli mesaj kuyruklarıyla bütünleşmenize izin verir:

  • ActiveMQ
  • RabbitMQ
  • HornetQ

Bu kütüphaneyi daha önce kullanmadım, bu yüzden kalitesine kefil olamam. Ancak STOMP oldukça basit bir protokoldür, bu yüzden gerekirse gönderime girebileceğinizden şüpheleniyorum.

Başka bir seçenek de beanstalkd'yi düğüm ile kullanmaktır . beanstalkd, yukarıda listelenen aracıların özellik esnekliğine ihtiyacınız yoksa çok iyi olan, C'de yazılmış çok hızlı bir "görev kuyruğu" dur.


10

Utanmaz eklenti: Bokeh üzerinde çalışıyorum : ZeroMQ üzerine inşa edilmiş basit, ölçeklenebilir ve ışık hızında bir görev kuyruğu. Devam eden görevler için takılabilir veri depolarını destekler, şu anda bellek içi, Redis ve Riak desteklenmektedir. Bunu kontrol et.


10

İşte yapabileceğim birkaç öneri:

node-amqp : Diğer şeylerin yanı sıra gerçek zamanlı çok oyunculu bir oyun ve sohbet uygulaması yapmak için Socket.IO ile birlikte başarıyla kullandığım bir RabbitMQ istemcisi. Yeterince güvenilir görünüyor.

zeromq.node : Aracısız rotadan aşağı gitmek istiyorsanız, bu bir göz atmaya değer olabilir. İşlevselliği uygulamak için daha fazla çalışma, ancak daha düşük gecikme ve daha yüksek verim elde etme olasılığınız daha yüksektir.


1
ZeroMQ kullanımında +1. Bir çok araştırma ve beanstalkd, RabbitMQ, BeeQueue, Bull ve Kue ile uğraşmak için harcanan zamanın ardından ZeroMQ, özellikle işçiler tarafından desteklenen hafif projeler için benim için en iyi deneyim oldu. Yıldırım hızındadır ve dokümantasyon birinci sınıftır. Ayrıca Redis sunucunuzu çok sayıda aramayla tıkamama avantajına da sahiptir.
dimiguel

zeromq.nodeşimdi burada tutulan: zeromq.js
Marinos An

8

Node-busmq'e bir göz atın - bu, redis ile desteklenen bir üretim sınıfı, yüksek oranda erişilebilir ve ölçeklenebilir bir mesaj veri yolu.

Bu modülü küresel bulutumuz için yazdım ve şu anda üretim ortamımızda dünyanın dört bir yanındaki çeşitli veri merkezlerinde kullanılıyor. Adlandırılmış kuyrukları, eşler arası iletişimi, garantili teslimatı ve federasyonu destekler.

Bu modülü neden oluşturduğumuz hakkında daha fazla bilgi için bu blog yazısını okuyabilirsiniz: Tüm Gemide Mesaj Otobüsü


6

kue , ihtiyacınız olan tek mesaj kuyruğudur


27
kue'nin iyi bakılmaması, birkaç sorunu olması ve tek bir test olmaması dışında!
vvo

4
Ayrıca, bu bir iş kuyruğu - mesaj kuyruğu değil
HyderA

Birkaç sorunu var ve prodüksiyon için uygun değil
Rahul Kumar

1
Kullanmak bullbenim için daha kolaydı. İle kueI belgelerinde kayboldu.
Marinos

5

Kestrel'i denemenizi tavsiye ederim , Beanstalk kadar hızlı ve basit ama fanout sıralarını destekliyor. Memcached konuşuyor. Scala kullanılarak oluşturulmuştur ve Twitter'da kullanılmaktadır.


7
Kestrel'in artık aktif gelişimde olmadığını belirtmekte fayda var.
GordyD

3

Bir göz atmak isteyebilirsin

Node.js için Redis Basit Mesaj Sırası

Redis kullanan ve Amazons SQS'nin çoğu özelliğini sunan.


1
RSMQ güzel ve benim için bir kez üretimde çalışıyor olsa da, Redis'te Lua komut dosyalarını kullandığını ve Redis kümesi / sentinel kurulumuyla çalışmayacağını unutmayın
naugtur

2

Azure ServiceBus'a ne dersiniz? Nodej'leri destekler.


1

Bak düğüm-kuyruk-lib . Belki de senin için yeterlidir. Node.js ve tarayıcıları destekler. İki dağıtım stratejisi vardır: yayın ve sıralı deneme. Yalnızca javascript.

Hızlı örnek:

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

1

KUE'yi açıkladığınız gibi socketIO ile kullandım. Soket kimliğini işle birlikte sakladım ve ardından İş Tamamlandı'da geri alabildim .. KUE, redis'e dayanıyor ve github'da iyi örnekleri var

bunun gibi bir şey ...

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();
}

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.